Dynamische Liste anpassen 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 Ansichtshalter 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 Elementansichten 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 diese Wiederverwendung von Ansichten wird die Leistung verbessert, da keine unnötigen Ansichten erstellt oder teure findViewById()
-Suchen ausgeführt werden müssen. Die Android-Supportbibliothek enthält drei Standard-Layoutmanager, die jeweils viele Anpassungsoptionen bieten:
LinearLayoutManager
:ordnet die Elemente in einer eindimensionalen Liste an. Die Verwendung vonRecyclerView
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 RecyclerView
DefaultItemAnimator
, um die Animation bereitzustellen. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie ein eigenes Animationsobjekt 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 behalten Sie die Kontrolle über die visuelle Darstellung eines ausgewählten Elements. Sie können auch die Richtlinien steuern, die das Auswahlverhalten steuern, z. B. welche Elemente für die Auswahl infrage kommen und wie viele Elemente ausgewählt werden können.
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
. - Implementiere
ItemDetailsLookup
. - Aktualisiere die Artikel
View
-Objekte imRecyclerView
, um anzuzeigen, ob der Nutzer sie ausgewählt oder die Auswahl aufgehoben hat.Die Auswahlbibliothek bietet keine Standarddekoration 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 den Stil der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Liste mit Farbstatusressourcen zu verwenden, um das Styling zu konfigurieren.
- Rufe in
- Verwende
ActionMode
, um dem Nutzer Tools zum Ausführen einer Aktion für die Auswahl zur Verfügung zu stellen. - Führt interpretierte sekundäre 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 im Grunde eine Factory für ItemDetails
-Instanzen, die von einer RecyclerView.ViewHolder
-Instanz gesichert oder aus ihr extrahiert werden.
Registriere einen SelectionTracker.SelectionObserver
, der benachrichtigt wird, 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 Referenzen.
- Sunflower-Demo-App, die
RecyclerView
verwendet. - Codelab zum Anzeigen einer scrollbaren Liste mit RecyclerView
- Codelab zu den Grundlagen von Android und Kotlin: Grundlagen von RecyclerView