Können Sie die getView()
Methode eines ArrayAdapter
erklären.Erklärung der getView() - Methode eines ArrayAdapter
las ich die Dokumentation und es hat drei Parameter:
position
: Die Position des Elements innerhalb der das Element von eingestellten Daten des Adapters, dessen Ansicht wir wollen.convertView
: Die alte Ansicht wiederverwenden, wenn möglich. Hinweis: Sie sollten überprüfen, dass diese Ansicht vor der Verwendung nicht null und von einem geeigneten Typ ist. Wenn es nicht möglich ist, diese Ansicht zu konvertieren, um die korrekten Daten anzuzeigen, kann diese Methode eine neue Ansicht erstellen.
Heterogene Listen können ihre Anzahl an Ansichtstypen angeben, so dass diese Ansicht immer vom richtigen Typ ist (siehe getViewTypeCount() und getItemViewType (int)).parent
: Die Eltern, die diese Ansicht wird schließlich zu
ich den position
Parameter verstanden angebracht werden. Wie sie gesagt haben, impliziert dies die Position des Gegenstandes, dessen Ansicht angefordert wurde.
Woher kommt convertView
? Ich habe viele Beispiele gesehen, wo sie prüfen, ob convertView
null ist. Wenn is null ist, blähen sie eine neue Instanz des Zeilenlayouts auf, füllen sie auf und geben sie zurück. Ich nehme an, ich habe mich auch darum gekümmert, aber eine Sache verblüfft mich immer noch. Was ist das Layout, das über den Parameter convertView
übergeben wird? Ist das the resource
parameter that is passed in when initialising the ArrayAdapter
? Ist eine zwischengespeicherte Kopie des letzten Layouts, das von getView()
zurückgegeben wird?
Und zuletzt. Was macht der Parameter parent
? Ich habe nicht viele Beispiele gesehen, die dies nutzen. Die meisten von ihnen einfach ein Zeilenlayout wiederverwenden/aufblasen und es zurückgeben.
(Ich frage, weil ich eine On-Klick-Animation in meinem ListView
habe. Insbesondere this one that aims to replicate Spotify's dropdown quick action menu. Meine Animation ein wenig träge war. Nach einer Weile dieses Problem zu diagnostizieren, ich habe erkannt, dass dies aufgrund gewesen Die Tatsache, dass meine Methode getView()
ein wenig Zeit in Anspruch nimmt, während ich ein neues Zeilenlayout in jeder Iteration aufblase, schlug vor, das Zeilenlayout in einem ViewHolder
zwischenzuspeichern, während andere Beispiele darauf verweisen, den Parameter convertView
wiederzuverwenden, dh nur ein Zeilenlayout aufzublasen wenn convertView
null ist.)
Das ist eine wirklich nette Antwort! – Tarik
die beste Antwort tnx –