Inhaberklasse in der Adapterklasse

8

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.

    
user1537629 19.07.2012, 11:14
quelle

3 Antworten

7

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.

  1. Wenn Sie also "View Holder" verwenden, können Sie einfach auf jede Ansicht zugreifen, ohne dass Sie nachsehen müssen, was wertvolle Prozessorzyklen spart.
  2. mit einem 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.

    
Vivek Kumar Srivastava 19.07.2012, 11:41
quelle
2

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.

    
Rajesh 19.07.2012 11:33
quelle
1

Es ist ein Optimierungspunkt. Ohne viewHolder müssen Sie jedes Mal die Methoden findViewById aufrufen. Mit dem viewHolder müssen Sie diese nur einmal aufrufen.

Beispiel mit einem TextView und einem ImageView:

  • Ohne ViewHolder:

    %Vor%
  • Mit ViewHolder:

    %Vor%
AMerle 19.07.2012 11:29
quelle

Tags und Links