Dynamische Liste anpassen Teil von Android Jetpack
Sie können RecyclerView-Objekte an Ihre spezifischen Anforderungen anpassen. Die Standardklassen, die unter Dynamische Listen mit RecyclerView erstellen beschrieben werden, bieten alle Funktionen, die die meisten Entwickler benötigen. In vielen Fällen müssen Sie nur die Ansicht für jeden Ansichtshalter entwerfen und den Code schreiben, um diese Ansichten mit den entsprechenden Daten zu aktualisieren. Wenn Ihre Anwendung jedoch bestimmte Anforderungen hat, können Sie das Standardverhalten auf verschiedene Weise ä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 Elementansichten wiederverwendet werden sollen, die für den Nutzer nicht mehr sichtbar sind. Um eine Ansicht wiederzuverwenden oder zu recyceln, kann ein Layoutmanager den Adapter auffordern, den Inhalt der Ansicht durch ein anderes Element aus dem Dataset zu ersetzen. Durch das Recycling von Ansichten auf diese Weise wird die Leistung verbessert, da keine unnötigen Ansichten erstellt oder teure findViewById()-Suchvorgänge durchgeführt werden müssen. Die Android Support Library enthält drei Standard-Layout-Manager, die jeweils viele Anpassungsoptionen bieten:
LinearLayoutManager: ordnet die Elemente in einer eindimensionalen Liste an. Die Verwendung einesRecyclerViewmitLinearLayoutManagerbietet Funktionen wie einListView-Layout.GridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wie die Felder auf einem Schachbrett. Wenn Sie einRecyclerViewmitGridLayoutManagerverwenden, erhalten Sie Funktionen wie einGridView-Layout.StaggeredGridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wobei jede Spalte leicht gegenüber der vorherigen versetzt ist, wie die Sterne auf einer amerikanischen Flagge.
Wenn diese Layoutmanager nicht Ihren Anforderungen entsprechen, können Sie einen eigenen erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager erweitern.
Animationen für Elemente 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 RecyclerView DefaultItemAnimator, um die Animation bereitzustellen. 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 recyclerview-selection-Bibliothek können Nutzer Elemente in einer RecyclerView-Liste per Touch- oder Mauseingabe auswählen. So behältst du die Kontrolle über die visuelle Darstellung 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 Elemente ausgewählt werden können.
So fügen Sie einer RecyclerView-Instanz Unterstützung für die Auswahl hinzu:
- Legen Sie fest, welchen Auswahlschlüsseltyp Sie verwenden möchten, und erstellen Sie dann einen
ItemKeyProvider.Es gibt drei Schlüsseltypen, mit denen Sie ausgewählte Elemente identifizieren können:
Parcelableund die zugehörigen Unterklassen, z. B.UriStringLong
Ausführliche Informationen zu Auswahl-Schlüsseltypen finden Sie unter
SelectionTracker.Builder. - Implementieren Sie
ItemDetailsLookup. - Aktualisieren Sie die
View-Objekte in derRecyclerView, um anzugeben, ob der Nutzer sie auswählt oder die Auswahl aufhebt.Die Auswahlbibliothek bietet keine standardmäßige visuelle Dekoration für die ausgewählten Elemente. Geben Sie dies an, wenn Sie
onBindViewHolder()implementieren. Wir empfehlen folgende Vorgehensweise:- Rufen Sie in
onBindViewHolder()setActivated()auf, nichtsetSelected(), und zwar für dasView-Objekt mittrueoderfalse, je nachdem, ob das Element ausgewählt ist. - Aktualisieren Sie den Stil der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, die Ressource „ColorStateList“ zu verwenden, um den Stil zu konfigurieren.
- Rufen Sie in
- Verwende
ActionMode, um dem Nutzer Tools zur Verfügung zu stellen, mit denen er eine Aktion für die Auswahl ausführen kann. - Führe alle interpretierten sekundären Aktionen aus.
- Alles mit
SelectionTracker.Builderzusammenstellen. - Beziehen Sie die Auswahl in die Ereignisse des Aktivitätslebenszyklus ein.
ItemDetailsLookup ermöglicht der Auswahlbibliothek den Zugriff auf Informationen zu RecyclerView-Elementen, die mit einem MotionEvent angegeben werden.
Es ist im Grunde eine Factory für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder aus ihr extrahiert werden.
Registrieren Sie einen SelectionTracker.SelectionObserver, um benachrichtigt zu werden, wenn sich eine Auswahl ändert. Wenn eine Auswahl zum ersten Mal erstellt wird, starte ActionMode, um sie dem Nutzer zu präsentieren und auswahlspezifische Aktionen anzubieten. Sie können beispielsweise der Leiste ActionMode eine Schaltfläche zum Löschen hinzufügen und den Zurückpfeil in der Leiste so verknüpfen, dass die Auswahl aufgehoben wird. Wenn die Auswahl leer ist, also wenn der Nutzer die Auswahl zum letzten Mal löscht, wird der Aktionsmodus beendet.
Am Ende der Ereignisverarbeitungspipeline kann die Bibliothek feststellen, ob der Nutzer versucht, ein Element durch Tippen zu aktivieren oder ein Element oder eine Gruppe ausgewählter Elemente zu ziehen. Reagieren Sie auf diese Interpretationen, indem Sie den entsprechenden Listener registrieren. Weitere Informationen finden Sie unter SelectionTracker.Builder.
Das folgende Beispiel zeigt, wie diese Teile zusammenpassen:
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();
Zum Erstellen einer SelectionTracker-Instanz muss Ihre App dieselbe RecyclerView.Adapter, die Sie zum Initialisieren von RecyclerView verwenden, an SelectionTracker.Builder übergeben. Nachdem Sie die SelectionTracker-Instanz erstellt haben, fügen Sie sie daher in Ihre RecyclerView.Adapter ein. Andernfalls können Sie den ausgewählten Status eines Elements nicht mit der Methode onBindViewHolder() prüfen.
Damit der Auswahlstatus über die Lifecycle-Events des Aktivitätslebenszyklus hinweg beibehalten wird, muss Ihre App die Methoden onSaveInstanceState() und onRestoreInstanceState() des Auswahl-Trackers über die Methoden onSaveInstanceState() und onRestoreInstanceState() der Aktivität aufrufen. Ihre App muss außerdem eine eindeutige Auswahl-ID an den SelectionTracker.Builder-Konstruktor übergeben. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehr als eine eindeutige, auswählbare Liste haben kann, die alle in ihrem gespeicherten Zustand beibehalten werden müssen.
Zusätzliche Ressourcen
Weitere Informationen finden Sie in den folgenden Referenzen.
- Sunflower-Demo-App, die
RecyclerViewverwendet. - Codelab RecyclerView verwenden, um eine scrollbare Liste anzuzeigen
- Android Kotlin-Grundlagen: RecyclerView-Grundlagen (Codelab)