Py学习  »  tornado

TornadoFx中的ListView使用缓存窗体时显示重复项

MG lolenstine • 5 年前 • 970 次点击  

我正在从Internet加载JSON数据,捕获有关项目的数据,如名称、作者和imageurl。然后我想把它们一个放在另一个下面,所以我把它们放在ListView中。我只将它们作为一个自定义类添加一次,它只保存那些变量。

我对那些值的重复和不出现有问题。例如,它将加载前5个项目(20个项目中的一个),并在剩余的15个项目中重复这些项目。我不明白为什么会发生这种情况,还试图循环访问ListView items 数组并打印它们,它们都是不同的,也尝试对它们执行refresh(),但它似乎根本没有改变任何东西。

我添加了一个代码,用来创建listview和用来填充它的片段。

val lv = listview<Item>{
    anchorpaneConstraints {
        topAnchor = 0.0
        bottomAnchor = 0.0
        leftAnchor = 0.0
        rightAnchor = 0.0
    }
    cellFormat {
        graphic = cache {
            form {
                fieldset {
                    hbox {
                        spacing = 10.0
                        println(it.name)
                        println(it.author)
                        println(it.imgurl)
                        println(it.desc)
                        imageview {
                            image = Image(it.imgurl)
                            prefWidth(256.0)
                            prefHeight(256.0)

                        }
                        vbox {
                            field("Name") {
                                label(it.name)
                            }
                            field("Author") {
                                label(it.author)
                            }
                            field("Description") {
                                label {
                                    text = it.desc
                                    wrapWidth = 150
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

val tmpItems = items.clone() as ArrayList<JsonObject>()
val arr = ArrayList<Item>()
for (m in tmpItems) {
    arr.add(
    Item(
        m["name"].toString(),
    m["author"].toString(),
    m["desc"].toString(),
    m["imgUrl"].toString()
    )
)
}
lv.items.addAll(arr)

我期望输出是20个独特的项目,因为这就是 lv.items ,但显示的结果是在20行中重复5个唯一项。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30818
 
970 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Edvin Syse
Reply   •   1 楼
Edvin Syse    5 年前

使用时 cache 您需要为每个项指定一个唯一的ID,这样框架就知道如何为给定表单元格中当前显示的项检索缓存的UI元素。这在JavaDoc中为 隐藏物 功能。

如果项目中有ID字段,则可以使用该字段,例如:

cache(rowItem.id) { }

您甚至可以使用单元格的值,如果它是唯一的:

cache(it) { }