Erläuterung der getView () -Methode eines ArrayAdapter

Könnten Sie das erklären?getView() Methode einerArrayAdapter.

Ich habe die Dokumentation gelesen und sie hat drei Parameter:

position: Die Position des Elements im Datensatz des Adapters des Elements, dessen Ansicht wir möchten.convertView: Die alte Ansicht, wenn möglich wiederzuverwenden. Hinweis: Sie sollten vor der Verwendung überprüfen, ob diese Ansicht nicht null ist und von einem geeigneten Typ ist. Wenn diese Ansicht nicht konvertiert werden kann, um die korrekten Daten anzuzeigen, kann mit dieser Methode eine neue Ansicht erstellt werden.
In heterogenen Listen kann die Anzahl der Ansichtstypen angegeben werden, sodass diese Ansicht immer vom richtigen Typ ist (siehe getViewTypeCount () und getItemViewType (int)).parent: Das übergeordnete Element, an das diese Ansicht möglicherweise angehängt wird

Ich habe das verstandenposition Parameter. Wie sie sagten, ist es implizit die Position des Elements, dessen Ansicht angefordert wurde.

Woher kommtconvertView komme aus. Ich habe viele Beispiele gesehen, bei denen überprüft wurde, obconvertView ist Null. Wenn is gleich null ist, wird eine neue Instanz des Zeilenlayouts aufgeblasen, aufgefüllt und zurückgegeben. Ich denke, ich habe mich auch darum gekümmert, aber eine Sache verblüfft mich immer noch. Was ist das Layout, das durch die übergeben wirdconvertView Parameter. Ist wenndasresource Parameter, der bei der Initialisierung desArrayAdapter? Is ist eine zwischengespeicherte Kopie des letzten von zurückgegebenen LayoutsgetView()?

Und zuletzt. Was macht dieparent Parameter do. Ich habe nicht zu viele Beispiele dafür gesehen. Die meisten von ihnen können ein Zeilenlayout einfach wiederverwenden / aufblasen und zurückgeben.

(Ich frage, weil ich eine On-Click-Animation in meinem habeListView. SpeziellDiese soll das Dropdown-Schnellaktionsmenü von Spotify replizieren. Meine Animation war etwas träge. Nachdem ich dieses Problem für eine Weile diagnostiziert habe, habe ich festgestellt, dass dies auf die Tatsache zurückzuführen ist, dass meinegetView() Die Ausführung der Methode dauert einige Zeit, da ich in jeder Iteration ein neues Zeilenlayout aufblase. Jemand schlug vor, das Zeilenlayout in a zwischenzuspeichernViewHolder Andere Beispiele verweisen auf die Wiederverwendung desconvertView Parameter, d. h. nur Aufblasen eines Zeilenlayouts, wennconvertView ist Null.)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage