我想将项目列表迭代到ListView中。由于getChildCount()函数的奇怪行为(仅返回可见项目计数),下面的代码不足以将所有项目迭代到列表中。
for (int i = 0; i < list.getChildCount(); i++) {
item = (View)list.getChildAt(i);
product = (Product)item.getTag();
// make some visual changes if product.id == someProductId
}
我的屏幕显示7个结果,当列表中有超过7个项目时,无法访问第8个项目。只有可见项目..
我应该使用ListIterator吗?
感谢。
答案 0 :(得分:1)
您需要自定义列表适配器的getView()
方法,并将检查放入其中以检查当前项目的ID是否匹配:
Product product = items.get(position);
if(product.id == someProductId) {
//make visual changes
} else {
//reset visual changes to default to account for recycled views
}
由于通常只有可见项仅在特定时间存在,因此只要需要查看更多,就会调用getView。它们是在那时创建的,通常是从列表中现在不可见的项目中回收视图(因此,如果条件不匹配,您希望重置更改的原因)。
答案 1 :(得分:1)
所以@kcoppock解决了你的第一个问题,似乎你有另一个问题。如何更新视图项? Android SMS应用程序显示了一种方式:
创建您自己的列表视图项,如下所示:
public class MyListItem extends RelativeLayout {
...
}
列表视图项目布局文件中的:
< MyListItem android:layout_width=.....>
...
</ MyListItem >
并且在您的代码中,当您可以看到您的视图项时,将MyListItem
注册为数据更改的侦听器(数据取决于您)。我的意思是,当您的数据发生变化时,您可以直接更新该项目。
查看SMS应用程序源代码以了解更多信息。
答案 2 :(得分:0)
ListView(7)中的视图数量与适配器中的项目数量(大于7)不同。尝试使用BaseAdapter。