我正在从Internet加载JSON数据,捕获有关项目的数据,例如名称,作者和imageurl。然后,我想将它们一个接一个地加载,以便将它们放入列表视图。我只将它们作为一个自定义类添加一次,仅包含这些变量。
我在重复这些值并且没有按应有的方式出现问题。例如,它将加载前5个项目(共20个项目),并在其余15个项目上重复它们。我不明白为什么会这样,还尝试遍历listview的items
数组并打印出来,它们都是不同的,也尝试对它们执行refresh(),但似乎根本没有改变任何东西。
我正在添加用于创建列表视图的代码以及用于填充列表的代码。
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
中就是这样,但是显示的结果是5个唯一项重复了20行。
答案 0 :(得分:1)
使用cache
时,您需要为每个项目指定唯一的ID,因此框架知道如何检索给定表单元格中当前显示的项目的缓存ui元素。 cache
函数的javadoc中对此进行了详细说明。
如果您的商品中有一个id字段,则可以使用该字段,例如:
cache(rowItem.id) { }
如果唯一的话,您甚至可以使用该单元格的值:
cache(it) { }