Dynamische Liste anpassen Teil von Android Jetpack
Sie können anpassen
RecyclerView
um Ihre spezifischen Anforderungen zu erfüllen. 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
spezifischen Anforderungen zu erfüllen, können Sie das Standardverhalten auf verschiedene Arten ändern.
In diesem Dokument werden einige der möglichen Anpassungen beschrieben.
Layout ändern
RecyclerView
verwendet einen Layout-Manager, 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. Mit einemRecyclerView
mitLinearLayoutManager
bietet Funktionen wie eineListView
Layout.GridLayoutManager
: die Elemente in einem zweidimensionalen Raster anordnen, wie die Quadrate auf einem Schachbrett.RecyclerView
mitGridLayoutManager
bietet Funktionen wieGridView
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 Animationskünstler ist ein Objekt, das die abstrakte
RecyclerView.ItemAnimator
. Standardmäßig verwendet der 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 die Auswahl steuern
welche Elemente ausgewählt werden können und wie viele Elemente
ausgewählt werden.
Wenn Sie einer RecyclerView
-Instanz die Unterstützung für die Auswahl hinzufügen möchten, folgen Sie
diese Schritte:
- 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
Detaillierte Informationen zu Auswahlschlüsseltypen finden Sie unter
SelectionTracker.Builder
- Implementieren
ItemDetailsLookup
- Artikel aktualisieren
View
Objekte in denRecyclerView
, um anzugeben, ob der Nutzer hebt die Auswahl auf.Die Auswahlbibliothek bietet keine Standarddekoration für die ausgewählten Elemente. Geben Sie diese an, wenn Sie
onBindViewHolder()
Wir empfehlen den folgenden Ansatz:- Rufen Sie in
onBindViewHolder()
setActivated()
— nichtsetSelected()
– amView
-Objekt mittrue
oderfalse
, je nachdem, ob der Artikel 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.
- Rufen Sie in
ActionMode
verwenden , um Nutzenden Tools an die Hand zu geben, mit denen sie eine Aktion für die Auswahl ausführen können.- Führt interpretierte sekundäre Aktionen aus.
- Alles mit
SelectionTracker.Builder
zusammensetzen - Auswahl in die Aktivität Lifecycle-Events.
ItemDetailsLookup
ermöglicht der Auswahlbibliothek Zugriff
Informationen über RecyclerView
Elemente mit einer
MotionEvent
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 wird, der Nutzer die
beim letzten Mal ausgewählt – Aktionsmodus beenden.
Am Ende der Pipeline für die Ereignisverarbeitung ermittelt die Bibliothek möglicherweise,
dass der Nutzer versucht, ein Element zu aktivieren, indem er darauf tippt, oder
versuchen, ein Element oder eine Gruppe ausgewählter 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 zusammensetzen:
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();
Um eine
SelectionTracker
muss Ihre App dieselben
RecyclerView.Adapter
mit dem Sie RecyclerView
initialisieren,
SelectionTracker.Builder
. Daher sollten Sie, nachdem Sie den
SelectionTracker
-Instanz einfügen,
RecyclerView.Adapter
. Andernfalls können Sie den ausgewählten Status eines Artikels nicht über die onBindViewHolder()
-Methode prüfen.
Damit der Auswahlstatus über alle Lebenszyklusereignisse der Aktivität hinweg beibehalten wird,
muss die Methode
onSaveInstanceState()
und
onRestoreInstanceState()
aus der Aktivität
onSaveInstanceState()
und
onRestoreInstanceState()
. Ihre App muss außerdem eine eindeutige Auswahl-ID für den
SelectionTracker.Builder
-Konstruktor. Diese ID ist erforderlich, weil
kann eine Aktivität oder ein Fragment
mehr als eine unterschiedliche, auswählbare Liste,
die alle in ihrem gespeicherten Zustand beibehalten werden müssen.
Weitere Informationen
Weitere Informationen finden Sie in den folgenden Referenzen.
- Sonnenblume
Demo-App, die
RecyclerView
verwendet. - Codelab zum Anzeigen einer scrollbaren Liste mit RecyclerView
- Android Codelab zu Kotlin-Grundlagen: RecyclerView-Grundlagen.