我从listview / getChildAt方法得到一些奇怪的行为。
我有一个HashSet,iconsToUpdate,包含数据库中已更改的图标。我想遍历可见行以查看是否需要更新其任何图标以反映新图标。我不需要测试当前不在视图中的图标,因为它们在渲染时会正确绘制。
我的问题是,getChildAt似乎不应该返回null。我知道getChildAt只能返回当前可见的视图,但是对于某些可见行它返回null。
这是我的代码,遍历可见行:
Logger.debug("First visible index: " + f_listView.getFirstVisiblePosition());
Logger.debug("Last visible index: " + f_listView.getLastVisiblePosition());
for (int i = f_listView.getFirstVisiblePosition(); i <= f_listView.getLastVisiblePosition(); i++) {
String tag = "asdf"; // Remove when bug is fixed.
if (f_listView == null) {
Logger.debug("f_listView is null");
} else if (f_listView.getChildAt(i) == null) {
Logger.debug("Child at index " + i + " is null");
} else {
tag = (String) f_listView.getChildAt(i).getTag();
Logger.debug("Successful at index " + i + ", tag is: " + tag);
}
if (iconsToUpdate.contains(tag)) {
setIcon(i, f_aim.getInHouseIcon(tag));
}
}
这是与此循环运行相对应的日志:
D/...: First visible index: 3
D/...: Last visible index: 8
D/...: Successful at index 3, tag is: ...
D/...: Successful at index 4, tag is: ...
D/...: Successful at index 5, tag is: ...
D/...: Child at index 6 is null
D/...: Child at index 7 is null
D/...: Child at index 8 is null
应当注意,正确地报告了第一个和最后一个可见索引,因为我在运行此行时正在查看第3-8行。第6、7、8行的渲染正确。如果它们为null,如何显示?
另外,我不知道这是否重要,但是当我位于列表视图的顶部时,第5行是最后可见的行。
关于为什么将这些行返回为null的任何信息,将不胜感激。
谢谢!