it-swarm.com.de

RecyclerView vs. ListView

Vom Android-Entwickler ( Erstellen von Listen und Karten ):

Das RecyclerView-Widget ist eine erweiterte und flexible Version von Listenansicht.

Okay, das hört sich cool an, aber als ich dieses Beispielbild sah, wurde ich wirklich verwirrt über den Unterschied zwischen den beiden. 

enter image description here

Das obige Bild kann leicht mit ListView mit benutzerdefiniertem Adapter erstellt werden.

In welcher Situation sollte man also RecyclerView verwenden? 

251
Blaze Tama

RecyclerView wurde als ListView-Verbesserung erstellt. Sie können also eine angehängte Liste mit dem ListView-Steuerelement erstellen. Die Verwendung von RecyclerView ist jedoch einfacher: 

  1. Verwendet Zellen beim Scrollen nach oben/unten wiederverwenden - Dies ist möglich, wenn View Holder im listView-Adapter implementiert wird. Dies war jedoch optional, während in RecycleView die Standardmethode zum Schreiben des Adapters verwendet wird.

  2. Entkoppelt die Liste aus ihrem Container - so dass Sie Listenelemente zur Laufzeit problemlos in die verschiedenen Container (linearLayout, gridLayout) mit der Einstellung LayoutManager einfügen können.

Beispiel:

mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//or
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
  1. Animiert häufige Listenaktionen - Animationen werden entkoppelt und an ItemAnimator delegiert. 

Es gibt mehr über RecyclerView, aber ich denke, dass diese Punkte die wichtigsten sind.

Zusammenfassend lässt sich festhalten, dass RecyclerView ein flexibleres Steuerelement für den Umgang mit "Listendaten" ist, das Mustern der Delegierung von Bedenken folgt und sich nur eine Aufgabe lässt - das Recycling von Elementen.

330
daneejela

Damit Listenansichten eine gute Leistung bieten, müssen Sie das Haltemuster implementieren. Dies ist besonders bei dem Auffüllen der Liste mit verschiedenen Arten von Ansichten leicht zu tun. 

Der RecyclerView fügt dieses Muster ein, wodurch das Durcheinander erschwert wird. Es ist außerdem flexibler und erleichtert die Handhabung verschiedener Layouts, die nicht geradlinig sind, wie ein Raster.

35
CaptRespect

ListView ist der Vorfahr von RecyclerView. Es gab viele Dinge, die ListView entweder nicht oder nicht gut machte. Wenn Sie die Mängel von ListView erfassen und das Problem dadurch lösen würden, dass Sie die Probleme in verschiedene Domänen abstrahieren, würden Sie am Ende so etwas wie die Recycling-Ansicht sehen. Hier sind die Hauptprobleme bei ListViews:

  • View Wiederverwendung für dieselben Elementtypen nicht erzwungen (sehen Sie sich einen der Adapter an, der in ListView verwendet wird. Wenn Sie die getView-Methode studieren, werden Sie feststellen, dass ein Programmierer nichts daran hindert, einen neuen zu erstellen Ansicht für jede Zeile, auch wenn eine über die Variable convertView übergeben wird)

  • Verhindert nicht kostspielige findViewById -Verwendungen (Selbst wenn Sie wie oben erwähnt Ansichten recyceln, war es für devs möglich, findViewById aufzurufen, um den angezeigten Inhalt von untergeordneten Ansichten zu aktualisieren. Der Hauptzweck des ViewHolder pattern in ListViews diente zur Zwischenspeicherung der findViewById-Aufrufe. Dies war jedoch nur verfügbar, wenn Sie davon wussten, da es nicht Teil der Plattform war.)

  • Nur unterstütztes vertikales Scrollen mit angezeigten Reihenansichten (Die Ansicht des Recyclers ist nicht darauf aus, wo die Ansichten platziert werden und wie sie verschoben werden. Es wird in ein LayoutManager abstrahiert. Ein Recycler kann daher das traditionelle ListView wie gezeigt unterstützen oben, sowie Dinge wie GridView, aber es ist nicht darauf beschränkt, es kann mehr tun, aber Sie müssen die Programmierarbeit erledigen, um dies zu ermöglichen). 

  • Hinzufügen/Entfernen von Animationen war kein Anwendungsfall, der berücksichtigt wurde. Es lag ganz bei Ihnen, wie Sie vorgehen (vergleiche RecyclerView. Adapterklassen benachrichtigen * Methodenangebote v. ListViews, um eine Vorstellung zu bekommen).

Kurz gesagt, RecyclerView ist eine flexiblere Version von ListView, obwohl möglicherweise mehr Codierung von Ihrer Seite erforderlich ist.

33
Jim Baca

Die RecyclerView ist eine neue ViewGroup, die bereit ist, beliebige .__ zu rendern. Adapter-basierte Ansicht auf ähnliche Weise. Es wird angenommen, dass der Nachfolger von ListView and GridView und ist in der .__ zu finden. latest support-v7 version. Die RecyclerView wurde entwickelt im Hinblick auf Erweiterbarkeit ist es möglich, jede Art von .__ zu erstellen. Layout, das man sich vorstellen kann, aber nicht ohne ein bisschen Schmerz in den Arsch. Dosis.

Antwort aus Antonio leiva

 compile 'com.Android.support:recyclerview-v7:27.0.0'

RecyclerView ist in der Tat ein powerful view als ListView . Für weitere Informationen besuchen Sie Diese Seite .

20
IntelliJ Amiya

Es folgen einige wichtige Punkte/Unterschiede zwischen RecyclerView und ListView. Nehmen Sie Ihren Anruf mit Bedacht entgegen.

Wenn ListView für Sie funktioniert, gibt es keinen Grund für die Migration. Wenn du bist Wenn Sie eine neue Benutzeroberfläche erstellen, ist RecyclerView möglicherweise besser geeignet.

RecylerView hat ViewHolder eingebaut, es ist nicht notwendig, unser eigenes .__ zu implementieren. wie in listView. Es unterstützt auch Benachrichtigung bei bestimmten Index

Dinge, wie das Hinzufügen oder Entfernen von Objekten animieren, sind bereits im RecyclerView implementiert, ohne dass Sie etwas tun müssen

Wir können einen Layout-Manager mit einer RecyclerView verknüpfen. Dies kann .__ sein. Wird verwendet, um zufällige Ansichten in recycleview zu erhalten, während dies Einschränkung war. in ListView In einer ListView ist der einzige verfügbare Sichttyp die vertikale ListView. Es gibt keinen offiziellen Weg, um eine .__ zu implementieren. horizontale ListView. Wenn wir jetzt eine RecyclerView verwenden, können wir eine

i) LinearLayoutManager - unterstützt sowohl vertikal als auch horizontal Listen, ii) StaggeredLayoutManager - der Pinterest wie .__ unterstützt. gestaffelte Listen, iii) GridLayoutManager - unterstützt die Anzeige von Gitter wie in den Galerie-Apps.

Und das Beste ist, dass wir das alles dynamisch machen können, wenn wir wollen.

15

Großer Vorteil :

ViewHolder ist standardmäßig in ListView nicht verfügbar. Wir werden explizit in der getView().RecyclerView erstellen - hat Viewholder eingebaut.

13

Ich denke, der größte und größte Unterschied besteht darin, dass ListView beim Erstellen oder Platzieren des Artikels nach der Position des Artikels sucht, andererseits RecyclerView nach dem Typ des Artikels. Wenn ein anderes Element mit demselben Typ erstellt wurde, erstellt RecyclerView es nicht erneut. Es fragt zuerst den Adapter und fragt dann nach recyceltem Pool, wenn der recycelte Pool sagt: "Ja, ich habe einen ähnlichen Typ erstellt", dann versucht RecyclerView nicht denselben Typ zu erstellen. ListView hat keinen solchen Pooling-Mechanismus. 

3
Mustafa Güven

Neben den obigen Unterschieden gibt es noch einige weitere:

  1. RV trennt die Ansichtserzeugung und das Binden von Daten für die Ansicht . In LV müssen Sie prüfen, ob convertView zum Erstellen der Ansicht null ist oder nicht, bevor Sie Daten daran binden . Im Fall von RV wird dies angezeigt Wird nur erstellt, wenn es benötigt wird, aber im Falle von LV kann man die Prüfung für convertview verpassen und erstellt jedes Mal eine Ansicht.

  2. Mit LayoutManager ist das Umschalten zwischen Raster und Liste jetzt einfacher.

  3. Es ist nicht erforderlich, alle Elemente zu benachrichtigen und zu aktualisieren, selbst wenn nur ein Element geändert wird.

  4. Im Falle von LV ..__ musste View-Caching implementiert werden, das standardmäßig in RV bereitgestellt wird. (Es besteht ein Unterschied zwischen dem Zwischenspeichern von Ansichten und dem Recycling.)

  5. Sehr einfache Artikelanimationen bei Wohnmobilen.

3
Virat18

Vorteile von RecyclerView gegenüber Listview:

  1. Enthält standardmäßig ViewHolder.

  2. Einfache Animationen.

  3. Unterstützt horizontale, gitter- und versetzte Layouts

Vorteile von ListView gegenüber RecyclerView:

  1. Einfach Trenner hinzufügen.

  2. Kann eingebauten arrayAdapter für einfache, einfache Listen verwenden

  3. Unterstützt Kopf- und Fußzeile.

  4. Unterstützt OnItemClickListner.

3
Manohar Reddy

Ich habe etwas mit RecyclerView gearbeitet und bevorzuge ListView.

  1. Sicher, beide verwenden ViewHolders, also ist dies kein Vorteil.

  2. Eine RecyclerView ist schwieriger beim Codieren.

  3. Eine RecyclerView enthält keine Kopf- und Fußzeile, also ein Minuszeichen.

  4. Für eine ListView muss kein ViewHolder erstellt werden. Wenn Sie eine Liste mit Abschnitten oder Unterüberschriften erstellen möchten, empfiehlt es sich, unabhängige Elemente (ohne ViewHolder) zu erstellen. Dies ist einfacher und erfordert keine separaten Klassen.

2
CoolMind

Meiner Meinung nach wurde RecyclerView gemacht, um das Problem mit dem in den Listviews verwendeten Recycling-Muster zu beheben, da dies das Leben des Entwicklers schwieriger machte. Alle anderen, mit denen Sie mehr oder weniger umgehen könnten, benutze ich zum Beispiel denselben Adapter ListView und GridView Es ist in beiden Ansichten nicht wichtig, dass getView, getItemCount, getTypeCount verwendet wird. Es ist also dieselbe Variable .RecyclerView nicht erforderlich, wenn ListView mit ListAdapter oder GridView bereits mit Gitteradaptern arbeitet. Wenn Sie das ViewHolder-Muster in Ihren Listenansichten korrekt implementiert haben, werden Sie über RecycleView keine großen Verbesserungen feststellen.

2
aimiliano
  1. Sie können eine Schnittstelle verwenden, um einen Klicklistener bereitzustellen. Ich benutze diese Technik auch mit ListViews.
  2. Kein Trenner: Fügen Sie in Ihrer Zeile einfach eine Ansicht mit einer Breite von Match_parent und einer Höhe von 1dp hinzu und geben Sie ihr eine Hintergrundfarbe.
  3. Verwenden Sie einfach einen StateList-Selektor für den Zeilenhintergrund.
  4. addHeaderView kann auch in ListViews vermieden werden: Platzieren Sie die -Header einfach außerhalb der View.

Wenn also die Effizienz Ihr Anliegen ist, ist es eine gute Idee, eine ListView durch eine RecyclerView zu ersetzen.

1
Jay Patel

RecyclerView info

Das RecyclerView wurde mit Android 5.0 (Lollipop) eingeführt. es ist in der Support Library enthalten. Somit ist es kompatibel mit Android API Level 7.

Ähnlich wie bei ListView, RecyclerView’s besteht die Hauptidee darin, die Auflistungsfunktionalität auf leistungsfreundliche Weise bereitzustellen. Der 'Recycler'-Teil des Namens dieser Ansicht ist nicht zufällig vorhanden. Das RecyclerView kann tatsächlich die Elemente recyceln, mit denen es gerade arbeitet. Der Recyclingprozess wird mithilfe eines Musters namens Ansichtshalter durchgeführt.

Vor- und Nachteile von RecyclerView

Vorteile:

  • integrierte Animationen zum Hinzufügen, Aktualisieren und Entfernen von Elementen
  • erzwingt das Recycling von Ansichten mithilfe des ViewHolder-Musters
  • unterstützt sowohl Grids als auch Listen
  • unterstützt vertikales und horizontales Scrollen
  • kann zusammen mit DiffUtil verwendet werden

Nachteile:

  • erhöht die Komplexität
  • nein OnItemClickListener

ListView info

Das ListView gibt es seit den Anfängen von Android. Es war sogar in API Level 1 verfügbar und hat den gleichen Zweck wie das RecyclerView.

Die Benutzung der ListView ist eigentlich ganz einfach. In dieser Hinsicht ist es nicht wie sein Nachfolger. Die Lernkurve ist flüssiger als beim RecyclerView. Somit ist es leichter zu erfassen. Wir müssen uns nicht mit Dingen wie LayoutManager, ItemAnimator oder DiffUtil befassen.

Vor- und Nachteile von ListView

Vorteile:

  • einfache Bedienung
  • standardadapter
  • verfügbarer OnItemClickListener
  • es ist die Grundlage des ExpandableListView

Nachteile:

  • unterstützt nicht die Verwendung des ViewHolder-Musters
0
Basi

Einfache Antwort: Sie sollten RecyclerView in einer Situation verwenden, in der Sie viele Elemente anzeigen möchten und deren Anzahl dynamisch ist. ListView sollte nur verwendet werden, wenn die Anzahl der Elemente immer gleich ist und auf die Bildschirmgröße beschränkt ist. 

Sie finden es schwieriger, weil Sie nur an die Android-Bibliothek denken. 

Heute gibt es eine Vielzahl von Optionen, mit denen Sie Ihre eigenen Adapter erstellen können. So können Sie Listen und Raster dynamischer Elemente erstellen, die Sie auswählen, neu anordnen, Animationen, Trennlinien verwenden, Fußzeilen, Kopfzeilen usw. hinzufügen können. 

Lassen Sie sich nicht erschrecken und versuchen Sie es mit RecyclerView. Sie werden es lieben, wenn Sie eine Liste mit 100 aus dem Internet heruntergeladenen Elementen (wie Facebook-News) in einem ListView und einem RecyclerView erstellen Wenn Sie versuchen, einen Bildlauf durchzuführen, wird die Test-App möglicherweise angehalten, bevor Sie überhaupt einen Bildlauf durchführen können.

Ich empfehle Ihnen, diese beiden Bibliotheken zu überprüfen, um einfache Adapter zu erstellen:

FastAdapter von mikepenz

FlexibleAdapter von davideas

0
Erick Moya