RecyclerView vs. ListView

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

Das RecyclerView-Widget ist eine erweiterte und flexiblere Version von ListView.

Okay, es klingt cool, aber als ich dieses Beispielbild sah, war ich wirklich verwirrt über den Unterschied zwischen den beiden.

Bildbeschreibung hier eingeben

Das obige Bild kann von ListView mit einem benutzerdefinierten Adapter einfach erstellt werden.

Also, in welcher Situation sollte RecyclerView ?

Solutions Collecting From Web of "RecyclerView vs. ListView"

RecyclerView wurde als ListView-Verbesserung erstellt, also können Sie eine angefügte Liste mit ListView-Steuerelement erstellen, aber RecyclerView ist einfacher als:

  1. Wiederverwendung von Zellen beim Scrollen nach oben / unten – dies ist mit der Implementierung von View Holder im listView-Adapter möglich, aber es war eine optionale Sache, während es im RecycleView die Standardmethode zum Schreiben von Adaptern ist.

  2. Entkoppelt die Liste von ihrem Container – so können Sie Listenelemente einfach zur Laufzeit in den verschiedenen Containern (linearLayout, gridLayout) mit der Einstellung LayoutManager platzieren .

Beispiel:

 mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); //or mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2)); 
  1. Animiert allgemeine 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 sagen, dass RecyclerView eine flexiblere Steuerung für die Handhabung von “Listendaten” darstellt, die den Delegationsmustern von Bedenken folgen und nur eine Aufgabe für sich selbst überlassen – das Recycling von Artikeln.

Damit Listenansichten eine gute performance aufweisen, müssen Sie das Halterungsmuster implementieren, und das ist besonders dann problematisch, wenn Sie die Liste mit verschiedenen Ansichten füllen möchten.

Der RecyclerView bäckt dieses Muster und erschwert so das Durcheinander. Es ist auch flexibler und erleichtert die Handhabung verschiedener Layouts, die nicht geradlinig wie ein Raster sind.

ListView ist der ListView von RecyclerView . Es gab viele Dinge, die ListView entweder nicht oder nicht gut gemacht hat. Wenn Sie die Mängel der ListView sammeln und das Problem lösen würden, indem Sie die Probleme in verschiedene Domänen abstrahieren, erhalten Sie so etwas wie die Recycler-Ansicht. Hier sind die wichtigsten Problempunkte mit ListViews:

  • View Reuse nicht für gleiche Elementtypen erzwingen (siehe einen der Adapter, die in einem ListView werden. Wenn Sie die getView-Methode untersuchen, sehen Sie, dass ein Programmierer nicht für jede Zeile eine neue Ansicht erstellen kann, selbst wenn über die convertView Variable übergeben)

  • Nicht verhindern kostspielige findViewById verwendet (Auch wenn Sie Ansichten wie oben verwertet waren, war es möglich für Devs findViewById aufrufen, um den angezeigten Inhalt der untergeordneten findViewById zu aktualisieren. Der Hauptzweck der ViewHolder Muster in ListViews war die findViewById Aufrufe zwischenzuspeichern Allerdings war dies nur möglich, wenn Sie davon wussten, da es überhaupt nicht Teil der Plattform war.

  • Nur unterstütztes vertikales Scrollen mit angezeigten Row-Views (Recycler-View kümmert sich nicht darum, wo Views platziert und wie sie verschoben werden, es wird in einen LayoutManager abstrahiert. Ein Recycler kann daher das traditionelle ListView wie oben gezeigt, unterstützen GridView , aber es ist nicht darauf beschränkt, es kann mehr tun, aber Sie müssen die Programmierfußarbeit tun, um es geschehen zu lassen).

  • Animationen zum Hinzufügen / Entfernen waren kein Anwendungsfall, der berücksichtigt wurde. Es lag ganz bei Ihnen, herauszufinden, wie das geht (vergleichen Sie die RecyclerView. Adapter-classn benachrichtigen * Methodenangebote v. ListViews, um eine Idee zu bekommen).

Kurz gesagt, RecyclerView ist eine flexiblere ListView des ListView , auch wenn Sie möglicherweise mehr ListView auf Ihrer Seite machen müssen.

Die RecyclerView ist eine neue ViewGroup, die bereit ist, jede adapterbasierte Ansicht auf ähnliche Weise zu rendern. Es ist der Nachfolger von ListView and GridView , und es kann in der latest support-v7 version . Der RecyclerView wurde im RecyclerView Erweiterbarkeit entwickelt, so dass es möglich ist, jede Art von Layout zu erstellen, die Sie sich vorstellen können, aber nicht ohne ein wenig Schmerz in den Arsch Dosis.

Antwort von Antonio Leiva genommen

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

RecyclerView ist in der Tat eine powerful view als ListView . Für weitere Details können Sie diese Seite besuchen.

Im Folgenden sind einige wichtige Punkte / Unterschiede zwischen RecyclerView und ListView aufgeführt. Nimm deinen Anruf mit Bedacht.

Wenn ListView für Sie arbeitet, besteht kein Grund zur Migration. Wenn Sie eine neue Benutzeroberfläche schreiben, ist RecyclerView möglicherweise besser geeignet.

RecylerView hat ViewHolder eingebaut, muss nicht wie in listView implementiert werden. Es unterstützt auch die Benachrichtigung bei bestimmten Index

Dinge wie das Animieren des Hinzufügens oder Entfernens von Elementen sind bereits im RecyclerView implementiert, ohne dass Sie etwas tun müssen

Wir können einen Layout-Manager einem RecyclerView zuordnen, dies kann verwendet werden, um zufällige Ansichten im Recycleview zu erhalten, während dies in ListView eine Einschränkung darstellte. In einem ListView ist der einzige verfügbare Ansichtstyp das vertikale ListView. Es gibt keine offizielle Möglichkeit, eine horizontale ListView zu implementieren. Mit einem RecyclerView können wir nun ein

i) LinearLayoutManager – unterstützt sowohl vertikale als auch horizontale Listen, ii) StaggeredLayoutManager – unterstützt Pinterest-ähnliche gestaffelte Listen, iii) GridLayoutManager – unterstützt die Darstellung von Grids, wie sie in Gallery-Anwendungen zu sehen sind.

Und das Beste ist, dass wir all das dynamisch so machen können, wie wir es wollen.

Großer Vorteil :

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

Ich denke, der wichtigste und größte Unterschied besteht darin, dass ListView beim Erstellen oder ListView nach der Position des ListView sucht, während RecyclerView nach dem Typ des Elements sucht. Wenn ein anderes Element mit demselben Typ erstellt wurde, erstellt RecyclerView es nicht erneut. Er fragt zuerst den Adapter und fragt dann nach recyclepool, wenn der recycelte Pool sagt “Ja, ich habe einen ähnlichen Typ erstellt”, dann versucht RecyclerView nicht, denselben Typ zu erstellen. ListView hat keinen ListView Pooling-Mechanismus.

Zusätzlich zu den oben genannten Unterschieden gibt es noch einige weitere:

  1. RV trennt die Erstellung von Ansichten und die Bindung von Daten an die Ansicht. In LV müssen Sie vor dem Binden von Daten überprüfen, ob convertView null ist oder nicht, um eine Sicht zu erstellen. Im Fall von RV wird die Ansicht nur erstellt, wenn sie benötigt wird, aber im Falle von LV kann man die Prüfung auf Convertview verpassen und erstellt die Ansicht jedes Mal.

  2. Das Wechseln zwischen Grid und List ist jetzt einfacher mit dem LayoutManager.

  3. Keine Notwendigkeit, alle Artikel zu benachrichtigen und zu aktualisieren, auch wenn nur einzelne Artikel geändert werden.

  4. Bei LV musste View-Caching implementiert werden. Es wird standardmäßig in RV bereitgestellt. (Es gibt einen Unterschied zwischen View Caching und Recycling.)

  5. Sehr einfache Elementanimationen bei RV.

Meiner Meinung nach wurde RecyclerView , um das Problem mit dem Recyclingmuster zu lösen, das in Listenansichten verwendet wird, da es das Leben des Entwicklers erschwerte. Mit all dem könntest du mehr oder weniger fertig werden. Zum Beispiel verwende ich den gleichen Adapter für ListView und GridView es spielt keine Rolle in beiden Ansichten, dass getView , getItemCount , getTypeCount wird, also ist es das gleiche. RecyclerView wird nicht benötigt, wenn ListView mit ListAdapter oder GridView mit Grid Adaptern bereits für Sie arbeitet. Wenn Sie das ViewHolder Muster in Ihren Listenansichten korrekt implementiert haben, sehen Sie keine große Verbesserung gegenüber RecycleView .

Ich habe ein wenig mit RecyclerView und bevorzuge weiterhin ListView .

  1. Sicher, beide benutzen ViewHolders , das ist also kein Vorteil.

  2. Ein RecyclerView ist schwieriger in der Codierung.

  3. Ein RecyclerView enthält keine Kopf- und Fußzeile, also ist es ein Minus.

  4. Ein ListView benötigt keinen ViewHolder. In Fällen, in denen Sie eine Liste mit Abschnitten oder Unterüberschriften haben möchten, wäre es eine gute Idee, unabhängige Elemente (ohne einen ViewHolder) zu erstellen. Dies ist einfacher und erfordert keine separaten classn.

  1. Sie können eine Schnittstelle verwenden, um einen Klick-Listener bereitzustellen. Ich benutze diese Technik auch mit ListViews.
  2. Kein Teiler: Fügen Sie einfach in Ihrer Zeile 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: Setzen Sie den Header einfach außerhalb der View.

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

Vorteile von RecyclerView gegenüber Listenansicht:

  1. Enthält standardmäßig ViewHolder.

  2. Einfache Animationen.

  3. Unterstützt horizontale, Raster- und gestaffelte Layouts

Vorteile von listView gegenüber recycleView:

  1. Einfacher Teiler hinzuzufügen.

  2. Kann eingebauten ArrayAdapter für einfache Listen verwenden

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

  4. Unterstützt OnItemClickListner.

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 mit der Android-Bibliothek denken.

Heutzutage gibt es viele Optionen, die Ihnen helfen, Ihre eigenen Adapter zu erstellen, die das Erstellen von Listen und Rastern dynamischer Elemente vereinfachen, die Sie auswählen, neu anordnen, Animationen, Teiler, Fußzeilen, Kopfzeilen usw. verwenden können.

Lassen Sie sich nicht erschrecken und versuchen Sie es mit RecyclerView. Sie können beginnen, es zu lieben, indem Sie eine Liste von 100 im Web heruntergeladenen Elementen (wie Facebook News) in einem ListView und einem RecyclerView erstellen Erfahrung), wenn Sie versuchen, zu scrollen, wird wahrscheinlich die Test-App stoppen, bevor Sie es überhaupt tun können.

Ich empfehle Ihnen, diese zwei Bibliotheken zu überprüfen, um einfache Adapter herzustellen:

FastAdapter von mikepenz

FlexibleAdapter von davidas