J'obtiens un comportement étrange de la part d'un listview et de la méthode getChildAt.
J'ai un HashSet, iconsToUpdate, d'icônes qui ont été modifiées dans la base de données. Je veux itérer sur les lignes visibles pour voir si l'une de leurs icônes doit être mise à jour pour refléter les nouvelles icônes. Je n'ai pas besoin de tester les icônes qui ne sont pas actuellement visibles car elles seront dessinées correctement lors du rendu.
Mon problème est que getChildAt renvoie null alors qu'il ne devrait pas. Je sais que getChildAt ne peut renvoyer que les vues qui sont actuellement visibles, mais il renvoie un résultat nul pour certaines des lignes visibles.
Voici mon code qui itère sur les lignes visibles :
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));
}
}
Voici le journal correspondant à une exécution de cette boucle :
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
Il convient de noter que le premier et le dernier index visibles sont correctement signalés, car je visualise les lignes 3 à 8 lorsque je lance cette opération. Les lignes 6, 7 et 8 sont affichées correctement. Comment sont-elles affichées si elles sont nulles ?
Par ailleurs, je ne sais pas si c'est important, mais la ligne 5 est la dernière ligne visible lorsque je suis en haut de la liste.
Toute information sur la raison pour laquelle ces lignes sont retournées comme étant nulles serait grandement appréciée.
Merci !