Maison >Java >javaDidacticiel >Pourquoi la méthode « getView » de mon ListView est-elle appelée plusieurs fois et dans un ordre apparemment aléatoire ?
Méthode getView de l'adaptateur d'affichage de liste personnalisé : analyse approfondie des appels multiples
Question :
Dans un adaptateur de liste personnalisé, pourquoi la méthode getView est-elle appelée plusieurs fois, apparemment au hasard order?
Réponse :
La méthode getView dans un adaptateur de liste personnalisé peut être appelée plusieurs fois et dans n'importe quel ordre en raison de la nature inhérente du fonctionnement de ListView. Voici une explication des comportements observés dans le code fourni :
ConvertViews :
Le paramètre convertView représente une vue qui est recyclée pour être réutilisée. Lorsque convertView n'est pas nul, cela indique que ListView a déjà mesuré et gonflé une vue pour la position correspondante. Au lieu de créer une nouvelle vue, l'adaptateur réutilise cette vue recyclée.
Ordre d'appel getView :
Il n'y a aucun ordre garanti dans lequel getView sera appelé pour différentes positions . Le ListView peut appeler getView pour plusieurs positions avant même que l'entrée de l'utilisateur ne soit reçue. Ce comportement est particulièrement courant lorsque ListView a une hauteur définie sur wrap_content, comme dans la disposition XML donnée.
Pourquoi getView est appelé plusieurs fois :
getView est appelé plusieurs fois pour chaque position en raison du processus de mesure de ListView. Lorsque ListView est affiché pour la première fois, il mesure plusieurs enfants hors de l'adaptateur pour déterminer sa propre hauteur. Ce processus de mesure déclenche des appels getView pour la partie visible de la liste.
ConvertViews imprévisibles :
Au fur et à mesure que l'utilisateur fait défiler, ListView peut recycler les vues qui ne sont plus visibles. et réutilisez-les pour de nouveaux postes. Cela explique pourquoi le paramètre convertView peut être non nul avant même que l'utilisateur ait fait défiler.
Conclusion :
Bien que cela puisse paraître inhabituel, le comportement de getView étant appelé plusieurs fois et dans un ordre imprévisible n'est pas un problème. Cela fait partie intégrante de la façon dont ListView optimise les performances en réutilisant les vues et en mesurant uniquement un sous-ensemble d'enfants pour sa disposition initiale.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!