社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  tornado

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

MG lolenstine • 6 年前 • 1436 次点击  

我正在从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
 
1436 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Edvin Syse
Reply   •   1 楼
Edvin Syse    6 年前

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

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

cache(rowItem.id) { }

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

cache(it) { }