Я получаю странное поведение из метода 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 отображаются правильно. Как они отображаются, если они являются нулевыми?
Кроме того, я не знаю, важно ли это, но строка 5 является последней видимой строкой, когда я находится в верхней части списка.
Любая информация о том, почему эти строки возвращаются как null, будет с благодарностью.
Спасибо!