Benutzerdefinierte dynamische Liste Teil von Android Jetpack.
Sie können RecyclerView
-Objekte an Ihre spezifischen Anforderungen anpassen. Die in Dynamische Listen mit RecyclerView erstellen beschriebenen Standardklassen bieten alle Funktionen, die die meisten Entwickler benötigen. In vielen Fällen müssen Sie nur die Ansicht für jeden Viewholder entwerfen und den Code schreiben, um diese Ansichten mit den entsprechenden Daten zu aktualisieren. Wenn Ihre App jedoch bestimmte Anforderungen hat, können Sie das Standardverhalten auf verschiedene Arten ändern.
In diesem Dokument werden einige der möglichen Anpassungen beschrieben.
Layout ändern
RecyclerView
verwendet einen Layoutmanager, um die einzelnen Elemente auf dem Bildschirm zu positionieren und zu bestimmen, wann Artikelansichten wiederverwendet werden sollen, die für den Nutzer nicht mehr sichtbar sind. Wenn ein Layoutmanager eine Ansicht wiederverwenden oder recyceln möchte, kann er den Adapter bitten, den Inhalt der Ansicht durch ein anderes Element aus dem Datensatz zu ersetzen. Durch das Recycling von Ansichten wird die Leistung verbessert, da das Erstellen unnötiger Ansichten oder teure findViewById()
-Suchanfragen vermieden werden. Die Android-Supportbibliothek enthält drei Standard-Layoutmanager, die jeweils viele Anpassungsoptionen bieten:
LinearLayoutManager
:ordnet die Elemente in einer eindimensionalen Liste an. Die Verwendung einerRecyclerView
mitLinearLayoutManager
bietet Funktionen wie einListView
-Layout.GridLayoutManager
:ordnet die Elemente in einem zweidimensionalen Raster an, ähnlich wie die Quadrate auf einem Schachbrett. Die Verwendung einerRecyclerView
mit einerGridLayoutManager
bietet Funktionen wie einGridView
-Layout.StaggeredGridLayoutManager
:ordnet die Elemente in einem zweidimensionalen Raster an, wobei sich jede Spalte leicht von der vorherigen absetzt, ähnlich wie die Sterne auf einer amerikanischen Flagge.
Wenn diese Layoutmanager nicht Ihren Anforderungen entsprechen, können Sie eigene erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager
erweitern.
Artikelanimationen hinzufügen
Wenn sich ein Element ändert, verwendet RecyclerView
einen Animator, um sein Aussehen zu ändern. Dieser Animator ist ein Objekt, das die abstrakte Klasse RecyclerView.ItemAnimator
erweitert. Standardmäßig verwendet die RecyclerView
DefaultItemAnimator
für die Animation. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie ein eigenes Animator-Objekt definieren, indem Sie RecyclerView.ItemAnimator
erweitern.
Auswahl von Listenelementen aktivieren
Mit der Bibliothek recyclerview-selection
können Nutzer Elemente in einer RecyclerView
-Liste per Touch oder Maus auswählen. So haben Sie die Kontrolle über die visuelle Präsentation eines ausgewählten Elements. Sie können auch die Kontrolle über Richtlinien behalten, die das Auswahlverhalten steuern, z. B. welche Elemente ausgewählt werden können und wie viele.
So fügen Sie einer RecyclerView
-Instanz die Auswahlfunktion hinzu:
- Legen Sie fest, welchen Auswahlschlüsseltyp Sie verwenden möchten, und erstellen Sie dann einen
ItemKeyProvider
.Es gibt drei Haupttypen, mit denen Sie ausgewählte Elemente identifizieren können:
Parcelable
und die zugehörigen Untertypen, z. B.Uri
String
Long
Ausführliche Informationen zu Auswahlschlüsseltypen finden Sie unter
SelectionTracker.Builder
. - Implementieren Sie
ItemDetailsLookup
. - Aktualisiere die Artikel
View
-Objekte imRecyclerView
, um anzuzeigen, ob der Nutzer sie ausgewählt oder die Auswahl aufgehoben hat.Die Auswahlbibliothek bietet keine Standardvisualisierung für die ausgewählten Elemente. Geben Sie diese Informationen an, wenn Sie
onBindViewHolder()
implementieren. Wir empfehlen Folgendes:- Rufe in
onBindViewHolder()
setActivated()
– nichtsetSelected()
– für dasView
-Objekt mittrue
oderfalse
auf, je nachdem, ob das Element ausgewählt ist. - Aktualisieren Sie das Design der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Liste mit Farbstatusressourcen zu verwenden, um das Styling zu konfigurieren.
- Rufe in
- Verwenden Sie
ActionMode
, um Nutzern Tools zur Ausführung einer Aktion für die Auswahl zur Verfügung zu stellen. - Führen Sie alle interpretierten sekundären Aktionen aus.
- Stellen Sie alles mit
SelectionTracker.Builder
zusammen. - Fügen Sie die Auswahl in die Ereignisse des Aktivitätslebenszyklus ein.
Mit ItemDetailsLookup
kann die Auswahlbibliothek auf Informationen zu RecyclerView
-Elementen zugreifen, die eine MotionEvent
haben.
Es ist eine Art „Fabrik“ für ItemDetails
-Instanzen, die von einer RecyclerView.ViewHolder
-Instanz gesichert oder daraus extrahiert werden.
Registrieren Sie eine SelectionTracker.SelectionObserver
, um benachrichtigt zu werden, wenn sich eine Auswahl ändert. Wenn eine Auswahl zum ersten Mal erstellt wird, starten Sie ActionMode
, um sie dem Nutzer zu präsentieren und auswahlspezifische Aktionen anzubieten. Sie können beispielsweise eine Löschschaltfläche zur Leiste ActionMode
hinzufügen und den Rückwärtspfeil in der Leiste mit der Schaltfläche verbinden, um die Auswahl aufzuheben. Wenn die Auswahl leer ist, also der Nutzer die Auswahl zum letzten Mal gelöscht hat, beenden Sie den Aktionsmodus.
Am Ende der Ereignisverarbeitungspipeline kann die Bibliothek feststellen, dass der Nutzer versucht, ein Element durch Tippen zu aktivieren oder ein Element oder mehrere ausgewählte Elemente zu ziehen. Sie können auf diese Interpretationen reagieren, indem Sie den entsprechenden Listener registrieren. Weitere Informationen finden Sie unter SelectionTracker.Builder
.
Das folgende Beispiel zeigt, wie Sie diese Elemente zusammenfügen:
Kotlin
var tracker = SelectionTracker.Builder( "my-selection-id", recyclerView, StableIdKeyProvider(recyclerView), MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build()
Java
SelectionTracker tracker = new SelectionTracker.Builder<>( "my-selection-id", recyclerView, new StableIdKeyProvider(recyclerView), new MyDetailsLookup(recyclerView), StorageStrategy.createLongStorage()) .withOnItemActivatedListener(myItemActivatedListener) .build();
Wenn Sie eine SelectionTracker
-Instanz erstellen möchten, muss Ihre App dieselbe RecyclerView.Adapter
bereitstellen, mit der Sie RecyclerView
auf SelectionTracker.Builder
initialisieren. Daher sollten Sie die SelectionTracker
-Instanz nach dem Erstellen in Ihre RecyclerView.Adapter
einfügen. Andernfalls können Sie den ausgewählten Status eines Artikels nicht über die Methode onBindViewHolder()
prüfen.
Damit der Auswahlstatus während der Lebenszyklusereignisse der Aktivität beibehalten wird, muss Ihre App die Methoden onSaveInstanceState()
und onRestoreInstanceState()
des Auswahl-Trackers jeweils aus den Methoden onSaveInstanceState()
und onRestoreInstanceState()
der Aktivität aufrufen. Ihre App muss dem Konstruktor von SelectionTracker.Builder
auch eine eindeutige Auswahl-ID zur Verfügung stellen. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehrere verschiedene auswählbare Listen haben kann, die alle in ihrem gespeicherten Zustand beibehalten werden müssen.
Weitere Informationen
Weitere Informationen finden Sie in den folgenden Quellen.
- Sunflower-Demo-App, die
RecyclerView
verwendet - Codelab zum Anzeigen einer scrollbaren Liste mit RecyclerView
- Codelab Grundlagen von Android und Kotlin: Grundlagen von RecyclerView