Wie Sie in Ihrem benutzerdefinierten Listenadapter beobachtet haben, wird die getView-Methode mehrmals aufgerufen jede Zeile, und es geschieht scheinbar auf willkürliche Weise. Dieses Verhalten kann verwirrend sein, stellt aber eigentlich kein Problem im Android-Design dar.
Obwohl allgemein angenommen wird, dass getView nur für sichtbare Zeilen aufgerufen werden sollte, ist das nicht der Fall. ListView-Elemente werden recycelt und wiederverwendet, während Sie durch die Liste scrollen. Um diese Wiederverwendung zu erleichtern, misst ListView Ansichten für Zeilen, die bald sichtbar werden, vorab und speichert sie zwischen. Dieser Vormessungsprozess erfordert mehrere Aufrufe von getView, um die Abmessungen der Ansicht zu bestimmen.
Der wahrgenommene Mangel an Ordnung bei getView-Aufrufen ist ebenfalls ein Nebeneffekt von Recycling. Wenn Zeilen aus der Ansicht gescrollt werden, werden die zugehörigen Ansichten aus dem Cache entfernt und für Ansichten wiederverwendet, die bald sichtbar werden. Dies bedeutet, dass die Reihenfolge der getView-Aufrufe je nach Scrollverhalten des Benutzers variieren kann.
In Ihrem Fall haben Sie der ListView eine wrap_content-Höhe bereitgestellt. Dadurch wird ListView gezwungen, mehrere untergeordnete Elemente zum Zeitpunkt des Layouts zu messen, um die eigene Höhe zu bestimmen. Folglich erstellt ListView Cache-Ansichten für diese untergeordneten Elemente, bevor Sie überhaupt mit dem Scrollen beginnen.
Der Recyclingmechanismus von ListView ist für die Aufrechterhaltung einer reibungslosen Scrollleistung unerlässlich. Auch wenn die Reihenfolge und Anzahl der getView-Aufrufe unregelmäßig erscheinen mag, ist dies ein natürliches Nebenprodukt dieses Mechanismus und kein Fehler oder Bug.
Das obige ist der detaillierte Inhalt vonWarum wird die getView()-Methode meines Android-ListViews mehrmals und in scheinbar zufälliger Reihenfolge aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!