Es gibt eine einfache Frage, nach der ich fragen wollte, warum wir eine statische Halterklasse erstellen und die Ansichten darin zuordnen ?? Bitte löschen Sie meine Zweifel, es wird mir eine große Hilfe sein.
Ihr Code ruft möglicherweise findViewById()
während des Scrollens von ListView
häufig auf, was die Leistung beeinträchtigen kann. Selbst wenn der Adapter eine überhöhte Ansicht für das Recycling zurückgibt, müssen Sie die Elemente immer noch suchen und aktualisieren. Ein Weg zur wiederholten Verwendung von findViewById()
ist die Verwendung des Entwurfsmusters "view holder"
.
Ein ViewHolder
-Objekt speichert jede der Komponentenansichten innerhalb des Tag-Felds des Layouts, sodass Sie sofort darauf zugreifen können, ohne dass Sie sie wiederholt suchen müssen. Zuerst müssen Sie eine Klasse erstellen, die genau Ihre Ansichten enthält.
Sie können die Android-Richtlinie für weitere Details lesen.
static inner class
für die Ansichten verbessert die Leistung erheblich. Sie können auch Warum bevorzugt Android statische Klassen Link.
Noch ein interessanter Link Wie funktioniert ListView , nach dem Lesen dieses Blogs Entwickler kann Logik von LisView löschen und auch warum innere statische Klasse für ListView implementieren müssen.
Die Antwort ist auch einfach, wenn Sie verstehen, wie ein AdapterView
funktioniert.
Ein AdapterView
ist eine Ansicht, deren untergeordnete Elemente durch %Co_de% . Das Adapter
(genauer gesagt die konkrete Implementierung wie AdapterView
) enthält mehr Informationen als das, was zu einem bestimmten Zeitpunkt angezeigt wird. Um den Speicherverbrauch und auch die Leistung zu optimieren, verwendet die ListView
normalerweise die Adapter
s für die einzelnen Elemente. Sie haben also weniger View
-Objekte als die entsprechenden Daten.
Die wiederverwendbaren Objekte können eine komplexe Hierarchie von View
s oder View
sein. Wenn Sie also die einzelnen ViewGroups
-Objekte innerhalb dieser Hierarchie finden möchten, müssen Sie auf die View
-Methode angewiesen sein, und dies wird teuer, wenn die Ansichtshierarchie mehrere Ebenen hat. Aus Gründen der Einfachheit (und auch zur Verbesserung der Leistung) wird das View-Holder-Muster verwendet, wobei die einzelnen findViewById()
-Objekte, an denen wir interessiert sind, einer statischen inneren Klasse zugeordnet sind.
Sie können sich auf Lars Vogels Android-ListView- und ListActivity-Tutorial für weitere Informationen zum Thema beziehen Ansicht-Halter-Muster.