1. Inhaber anzeigen
In ListView war das Definieren von Ansichtsinhabern ein empfohlener Ansatz, um Referenzen für Ansichten beizubehalten. Aber es war kein Zwang. Wenn dies nicht der Fall ist, zeigt ListView veraltete Daten an. Ein weiterer großer Nachteil der Nichtverwendung von Ansichtshaltern könnte dazu führen, dass jedes Mal Ansichten anhand von IDs gefunden werden. Was zu verzögerten ListViews führte.
Dieses Problem wird in RecylerView mithilfe der RecyclerView.ViewHolder-Klasse gelöst. Dies ist einer der Hauptunterschiede in RecyclerView und ListView. Bei der Implementierung einer RecyclerView wird diese Klasse verwendet, um ein ViewHolder-Objekt zu definieren, das vom Adapter verwendet wird, um ViewHolder an eine Position zu binden. Ein weiterer Punkt, der hier zu beachten ist, ist, dass bei der Implementierung des Adapters für RecyclerView die Bereitstellung eines ViewHolder obligatorisch ist. Dies macht die Implementierung etwas komplex, löst jedoch die Probleme in ListView.
2. Layout Manager
Wenn von ListViews gesprochen wird, ist nur ein ListView-Typ verfügbar, nämlich die vertikale ListView. Sie können eine ListView mit horizontalem Bildlauf nicht implementieren. Ich weiß, dass es Möglichkeiten gibt, eine horizontale Schriftrolle zu implementieren, aber glauben Sie mir, dass sie nicht so konzipiert wurde.
Wenn wir uns jetzt Android RecyclerView und ListView ansehen, unterstützen wir auch horizontale Sammlungen. Tatsächlich unterstützt es mehrere Arten von Listen. Zur Unterstützung mehrerer Listentypen wird die RecyclerView.LayoutManager-Klasse verwendet. Dies ist etwas Neues, das ListView nicht hat. RecyclerView unterstützt drei Arten vordefinierter Layout-Manager:
LinearLayoutManager - Dies ist der am häufigsten verwendete Layout-Manager bei RecyclerView. Auf diese Weise können wir sowohl horizontale als auch vertikale Bildlauflisten erstellen. StaggeredGridLayoutManager - Mit diesem Layout-Manager können wir gestaffelte Listen erstellen. Genau wie der Pinterest-Bildschirm. GridLayoutManager - Mit diesem Layout-Manager können Raster wie in jeder Bildergalerie angezeigt werden.
3. Item Animator
Animationen in einer Liste sind eine völlig neue Dimension, die endlose Möglichkeiten bietet. In einer ListView als solche gibt es keine besonderen Bestimmungen, durch die Elemente animiert, hinzugefügt oder gelöscht werden können. Stattdessen wurde später, als sich Android weiterentwickelte, ViewPropertyAnimator von Googles Chet Haase in diesem Video-Tutorial für Animationen in ListView vorgeschlagen.
Beim Vergleich von Android RecyclerView mit ListView verfügt es über die RecyclerView.ItemAnimator-Klasse für die Verarbeitung von Animationen. Durch diese Klasse können benutzerdefinierte Animationen für das Hinzufügen, Löschen und Verschieben von Elementen definiert werden. Außerdem bietet es einen DefaultItemAnimator, falls Sie keine Anpassungen benötigen.
4. Adapter
ListView-Adapter waren einfach zu implementieren. Sie hatten eine Hauptmethode getView, bei der all die Magie passierte. Wo die Ansichten an eine Position gebunden waren. Außerdem hatten sie eine interessante Methode registerDataSetObserver, mit der man einen Beobachter direkt im Adapter einstellen kann. Diese Funktion ist auch in RecyclerView vorhanden, es wird jedoch die RecyclerView.AdapterDataObserver-Klasse verwendet. Der Vorteil von ListView besteht jedoch darin, dass drei Standardimplementierungen von Adaptern unterstützt werden:
ArrayAdapter CursorAdapter SimpleCursorAdapter Während der RecyclerView-Adapter alle Funktionen von ListView-Adaptern mit Ausnahme der integrierten Unterstützung für DB-Cursor und ArrayLists bietet. In RecyclerView.Adapter müssen wir ab sofort eine benutzerdefinierte Implementierung vornehmen, um Daten an den Adapter zu liefern. Genau wie ein BaseAdapter für ListViews. Wenn Sie mehr über die Implementierung des RecyclerView-Adapters erfahren möchten, lesen Sie bitte das Beispiel für Android RecyclerView.
5. Benachrichtigung über Datenänderungen
Wenn Sie mit einer ListView arbeiten und der Datensatz geändert wird, müssen Sie die notifyDataSetChanged-Methode des zugrunde liegenden Adapters aufrufen, um die Daten zu aktualisieren. Oder setzen Sie die setNotifyOnChange-Methode auf true, falls Sie die notifyDataSetChanged-Methode automatisch aufrufen möchten. Aber in beiden Fällen steht das Ergebnis ganz oben auf der Liste. Grundsätzlich werden die Ansichten der Liste aktualisiert.
Im Gegenteil, in einem RecyclerView-Adapter gibt es Methoden, um die Änderung entsprechend zu benachrichtigen, wenn sich ein einzelnes Element oder eine Reihe von Elementen geändert hat. Dies sind notifyItemChanged bzw. notifyItemRangeChanged und viele weitere wie:
notifyItemInsterted notifyItemMoved notifyItemRangeInsterted notifyItemRangeRemoved Und natürlich hat es die ursprüngliche Methode zum Aktualisieren der gesamten Liste, dh notifyDataSetChanged, die benachrichtigt, dass der angepasste gesamte Datensatz geändert wurde.
6. Artikeldekoration
Um benutzerdefinierte Teiler in einer ListView anzuzeigen, hätte man diese Parameter leicht in die ListView-XML einfügen können:
XHTML android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" 1 2 android: divider = "@ android: color / transparent" android: dividerHeight = "5dp" Der interessante Teil von Android RecyclerView ist, dass Ab sofort wird standardmäßig keine Trennlinie zwischen Elementen angezeigt. Obwohl die Leute bei Google dies absichtlich für die Anpassung ausgelassen haben müssen. Dies erhöht jedoch den Aufwand für einen Entwickler erheblich. Wenn Sie einen Teiler zwischen Elementen hinzufügen möchten, müssen Sie möglicherweise eine benutzerdefinierte Implementierung mithilfe der RecyclerView.ItemDecoration-Klasse durchführen.
Oder Sie können einen Hack anwenden, indem Sie diese Datei aus offiziellen Beispielen verwenden: DividerItemDecoration.java
7. OnItemTouchListener
Listenansichten hatten früher eine einfache Implementierung zur Erkennung von Klicks, dh mithilfe der AdapterView.OnItemClickListener-Schnittstelle.
Auf der anderen Seite wird die RecyclerView.OnItemTouchListener-Oberfläche verwendet, um Berührungsereignisse in Android RecyclerView zu erkennen. Dies erschwert die Implementierung ein wenig, bietet dem Entwickler jedoch eine bessere Kontrolle über das Abfangen von Berührungsereignissen. In der offiziellen Dokumentation heißt es, dass es für gestische Manipulationen nützlich sein kann, da es ein Berührungsereignis abfängt, bevor es an RecyclerView übermittelt wird.
RecyclerView
mit einer viel besseren API viel schneller und vielseitiger ist. Dinge wie das Animieren des Hinzufügens oder Entfernens von Elementen sind bereits in der implementiert,RecyclerView
ohne dass Sie etwas tun müssen. Keine Frage, wirf deinenListView
in den Mülleimer, derRecyclerView
ist hier, um die Show zu stehlen.