Tipps für den professionellen Einsatz von RecyclerView. Teil 1

Tipps für den professionellen Einsatz von RecyclerView. Teil 1


Ich habe beschlossen, diesen Artikel zu schreiben, weil Es wurde festgestellt, dass viele Entwickler Fehler bei der Verwendung von RecyclerView , obwohl Google es vor einiger Zeit veröffentlicht hat.


Die hier beschriebenen Punkte wurden in verschiedenen Berichten und Materialien auf Google Devs erwähnt.


In diesem Artikel werde ich kurz die wichtigsten Punkte dieses Videos beschreiben , und Sie müssen es jetzt nicht ansehen. Ich empfehle jedoch, es nach dem Lesen des Artikels vollständig anzusehen.


1. setHasFixedSize-Attribut


Legen Sie das Attribut recyclerView.setHasFixedSize(true) , wenn recyclerView nicht plant, die Größe seiner untergeordneten Elemente dynamisch zu ändern.


Infolgedessen wird recyclerView nicht jedes Mal neu gezeichnet, wenn die Daten im Listenelement aktualisiert werden. Dieses Element wird selbst neu gezeichnet.


2. Klicken Sie auf Listener


onCreateViewHolder(...) Sie den Klick-Handler in onCreateViewHolder(...) .


Wenn ein Benutzer auf ein Listenelement klickt, gibt viewHolder die Adapterposition an, an der dieser Klick aufgetreten ist ( vh.getAdapterPosition() ). Dies ist wichtig, da Elemente innerhalb des Adapters verschoben werden können und die zugehörigen view nicht neu erstellt werden.


Infolgedessen kann zum Zeitpunkt der view der view Folgendes passieren: Das Listenelement befindet sich beispielsweise an Position 2, aber wenn der Benutzer darauf klickt, befindet sich das Element bereits an Position 5. Verwenden Sie daher die Methode vh.getAdapterPosition() garantiert den korrekten Listenindex.


3. Verwenden verschiedener Arten von Ansichtskomponenten


R.layout.view_one Sie das layout direkt zurück, wenn Sie verschiedene Arten von view (z. B. R.layout.view_one ).


Wenn Ihr Adapter verschiedene Arten von view , sehen die onCreateViewHolder getItemViewType und onCreateViewHolder so aus wie in der Abbildung unten. Sie müssen eine switch in die onCreateViewHolder Methode schreiben, um die erforderliche Logik für die entsprechenden Arten von view zu implementieren.


Standard getItemViewType und onCreateViewHolder


Anstelle dieser Typen können Sie das layout sofort zurückgeben. Dies onCreateViewHolder Ihnen Boilerplate-Code in onCreateViewHolder :


Hochgeladen aufCreateViewHolder


Diese Technik kann nicht ständig angewendet werden, weil Manchmal benötigen Sie für jedes ausgewählte layout eine komplexere Logik in jedem ausgewählten layout . Ist dies jedoch nicht der Fall, ist das zurückgegebene layout der richtige Weg, um mit verschiedenen Arten von view .


4. DiffUtil


Verwenden Sie DiffUtil , um RecyclerView neue Daten hinzuzufügen.


Immer wenn sich die Daten in der recyclerView ändern, rufen die meisten Entwickler die notifyDataSetChanged() -Methode auf, um die aktualisierten Daten auf der Benutzeroberfläche anzuzeigen. Sie wissen einfach nicht, dass diese Methode ressourcenintensiv ist und dass DiffUtil viel effizienter arbeitet.


DiffUtil ist eine Dienstprogrammklasse, die die Differenz zwischen zwei Listen als Aktualisierungsliste berechnen kann, die dann die erste Liste in die zweite konvertiert. Es kann verwendet werden, um Aktualisierungen im recyclerView Adapter zu berechnen. Um DiffUtil verwenden zu DiffUtil , müssen Sie DiffUtil.Callback implementieren, für das mehrere erforderliche Methoden erforderlich sind, um die DiffUtil Logik zu implementieren:


Öffentliche Methoden DiffUtil.Callback


Der größte Vorteil von DiffUtil besteht darin, dass Sie in RecyclerView bestimmten Text in der TextView bestimmten Elements aktualisieren können, anstatt die gesamte Liste neu zu zeichnen. Dazu müssen Sie die onChangePayload Methode in DiffUtil.Callback . Es gibt einen sehr guten Artikel zu diesem Thema.


Im zweiten Teil werden wir uns andere Tipps ansehen, wie Sie RecyclerView gut nutzen können.


→ Tipps für den professionellen Einsatz von RecyclerView. Teil 2

Source: https://habr.com/ru/post/de425945/


All Articles