Dynamische Liste anpassen Teil von Android Jetpack.
Sie können RecyclerView
-Objekte an Ihre spezifischen Anforderungen anpassen. Die unter 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 Ansichtsinhaber 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 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. 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 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 Support Library umfasst drei standardmäßige Layout-Manager, von denen jeder viele Anpassungsoptionen bietet:
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 vonRecyclerView
mitGridLayoutManager
bietet Funktionen wie einGridView
-Layout.StaggeredGridLayoutManager
: ordnet die Elemente in einem zweidimensionalen Raster an, wobei jede Spalte leicht vom vorherigen Element entfernt ist, wie die Sterne auf einer amerikanischen Flagge.
Wenn diese Layoutmanager nicht Ihren Anforderungen entsprechen, können Sie Ihre eigenen erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager
erweitern.
Elementanimationen hinzufügen
Immer wenn sich ein Element ändert, verwendet RecyclerView
einen Animator, um seine Darstellung 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
In der Bibliothek recyclerview-selection
können Nutzer Elemente in einer RecyclerView
-Liste per Berührung 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 Auswahlunterstützung hinzu:
- Bestimmen Sie, welchen Auswahlschlüsseltyp Sie verwenden möchten, und erstellen Sie dann eine
ItemKeyProvider
.Es gibt drei Schlüsseltypen, mit denen Sie ausgewählte Elemente identifizieren können:
Parcelable
und die zugehörigen abgeleiteten Klassen wieUri
String
Long
Ausführliche Informationen zu Auswahlschlüsseltypen finden Sie unter
SelectionTracker.Builder
. - Implementiere
ItemDetailsLookup
. - Aktualisieren Sie die
View
-Objekte von Elementen in derRecyclerView
, um anzugeben, ob der Nutzer diese ausgewählt oder die Auswahl aufgehoben hat.Die Auswahlbibliothek bietet keine standardmäßige visuelle Gestaltung für die ausgewählten Elemente. Gib diese an, wenn du
onBindViewHolder()
implementierst. Wir empfehlen den folgenden Ansatz:- Rufen Sie 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 so, dass er den aktivierten Status darstellt. Wir empfehlen, zum Konfigurieren des Stils eine Ressourcen für die Farbstatusliste zu verwenden.
- Rufen Sie 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.
- Mit
SelectionTracker.Builder
kannst du alles zusammenstellen. - Nehmen Sie die Auswahl in die Lebenszyklusereignisse der Aktivität auf.
Mit ItemDetailsLookup
kann die Auswahlbibliothek auf Informationen über RecyclerView
-Elemente mit einem MotionEvent
zugreifen.
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 neu erstellt wird, starte ActionMode
, um sie dem Nutzer zu präsentieren und auswahlspezifische Aktionen auszuführen. Sie können beispielsweise der Leiste ActionMode
eine Schaltfläche zum Löschen hinzufügen und den Zurück-Pfeil auf der Leiste verbinden, um die Auswahl zu löschen. Wenn die Auswahl leer wird und der Nutzer sie beim letzten Mal löscht, wird der Aktionsmodus beendet.
Am Ende der Ereignisverarbeitungspipeline stellt die Bibliothek möglicherweise fest, dass der Nutzer versucht, ein Element zu aktivieren, indem er darauf tippt oder ein Element oder eine Gruppe ausgewählter Elemente in die gewünschte Richtung zieht. 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 zusammengesetzt werden:
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 Anwendung dasselbe RecyclerView.Adapter
angeben, mit dem Sie RecyclerView
auf SelectionTracker.Builder
initialisieren. Aus diesem Grund fügen Sie die SelectionTracker
-Instanz nach dem Erstellen in die RecyclerView.Adapter
ein. Andernfalls können Sie den ausgewählten Status eines Elements nicht über die Methode onBindViewHolder()
prüfen.
Damit der Auswahlstatus über alle Lebenszyklusereignisse der Aktivität hinweg erhalten bleibt, muss Ihre App die Methoden onSaveInstanceState()
und onRestoreInstanceState()
des Auswahl-Trackers aus den Methoden onSaveInstanceState()
und onRestoreInstanceState()
der Aktivität aufrufen. Außerdem muss deine App dem SelectionTracker.Builder
-Konstruktor eine eindeutige Auswahl-ID bereitstellen. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehr als eine unterschiedliche, auswählbare Liste haben kann, die alle in ihrem gespeicherten Status beibehalten werden müssen.
Zusätzliche Ressourcen
Weitere Informationen finden Sie in den folgenden Referenzen.
- Sunflower-Demo-App, die
RecyclerView
verwendet. - Verwenden Sie RecyclerView, um eine scrollbare Liste anzuzeigen.
- Codelab zu Android Kotlin-Grundlagen: RecyclerView-Grundlagen.