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 Layout-Manager, 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 recyceln , kann ein Layout
Manager den Adapter auffordern, den Inhalt der Ansicht durch ein
anderes Element aus dem Datensatz zu ersetzen. Durch das Recyceln von Ansichten auf diese Weise wird die Leistung verbessert, da keine unnötigen Ansichten erstellt oder aufwendige findViewById()-Suchvorgänge ausgefü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. Wenn SieRecyclerViewmitLinearLayoutManagerverwenden, erhalten Sie Funktionen wie bei einemListViewLayout.GridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wie die Quadrate auf einem Schachbrett. Wenn Sie einRecyclerViewmitGridLayoutManagerverwenden, erhalten Sie Funktionen wie bei einemGridViewLayout.StaggeredGridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wobei jede Spalte leicht von der vorherigen versetzt ist wie die Sterne auf der US-amerikanischen Flagge.
Wenn diese Layout-Manager nicht Ihren Anforderungen entsprechen, können Sie eigene erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager erweitern.
Elementanimationen hinzufügen
Immer 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 für die Animation. Wenn Sie benutzerdefinierte Animationen verwenden 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 behalten Sie 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 die Auswahlunterstützung hinzu:
- Bestimmen Sie den zu verwendenden Auswahlschlüsseltyp und erstellen Sie dann einen
ItemKeyProvider.Es gibt drei Schlüsseltypen, mit denen Sie ausgewählte Elemente identifizieren können:
Parcelableund seine Unterklassen wieUriStringLong
Weitere Informationen zu Auswahlschlüsseltypen finden Sie unter
SelectionTracker.Builder. - Implement
ItemDetailsLookup. - Aktualisieren Sie die Elemente
ViewObjekte in denRecyclerViewum widerzuspiegeln, ob der Nutzer sie auswählt oder die Auswahl aufhebt.Die Auswahlbibliothek bietet keine visuelle Standarddekoration für die ausgewählten Elemente. Geben Sie diese an, wenn Sie implementieren
onBindViewHolder(). Wir empfehlen den folgenden Ansatz:- Rufen Sie in
onBindViewHolder()setActivated()—nichtsetSelected()—für dasViewObjekt mittrueoderfalseauf, je nachdem, ob das Element ausgewählt ist. - Aktualisieren Sie das Styling der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Farbstatusliste Ressource zu verwenden, um das Styling zu konfigurieren.
- Rufen Sie in
- Verwenden Sie
ActionMode, um dem Nutzer Tools zur Verfügung zu stellen, mit denen er eine Aktion für die Auswahl ausführen kann. - Führen Sie alle interpretierten sekundären Aktionen aus.
- Führen Sie alles mit
SelectionTracker.Builderzusammen. - Auswahl in die Ereignisse des Aktivitätslebenszyklus einbeziehen
ItemDetailsLookup ermöglicht der Auswahlbibliothek den Zugriff auf Informationen zu RecyclerView Elementen über ein MotionEvent.
Es ist im Grunde eine Factory für
ItemDetails
Instanzen, die von einer
RecyclerView.ViewHolder
Instanz unterstützt 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,
starten Sie ActionMode um sie dem Nutzer zu präsentieren und
auswahlspezifische Aktionen anzubieten. Sie können beispielsweise der
ActionMode Leiste eine Schaltfläche zum Löschen hinzufügen und den Zurück-Pfeil in der Leiste so konfigurieren, dass die Auswahl aufgehoben wird. Wenn die Auswahl leer ist, weil der Nutzer sie zum letzten Mal aufgehoben hat, beenden Sie den Aktionsmodus.
Am Ende der Ereignisverarbeitungs-Pipeline kann die Bibliothek feststellen, dass der Nutzer versucht, ein Element durch Tippen zu aktivieren, oder versucht, 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.
Im folgenden Beispiel wird gezeigt, wie Sie diese Teile 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
Instanz zu erstellen, muss Ihre App denselben
RecyclerView.Adapter
übergeben, den Sie zum Initialisieren von RecyclerView verwenden, an
SelectionTracker.Builder. Deshalb müssen Sie die
SelectionTracker Instanz nach dem Erstellen in Ihren
RecyclerView.Adapter einfügen. Andernfalls können Sie den ausgewählten Status eines Elements nicht über die onBindViewHolder() Methode prüfen.
Damit der Auswahlstatus über die Ereignisse des Aktivitätslebenszyklus hinweg erhalten bleibt, muss Ihre App
die Methoden des Auswahl-Trackers
onSaveInstanceState()
und
onRestoreInstanceState()
aus den Methoden der Aktivität
onSaveInstanceState()
und
onRestoreInstanceState()
aufrufen. Ihre App muss dem
SelectionTracker.Builder Konstruktor auch eine eindeutige Auswahl-ID übergeben. Diese ID ist erforderlich, da
eine Aktivität oder ein Fragment möglicherweise mehrere unterschiedliche, auswählbare Listen enthält,
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
RecyclerViewverwendet. - Codelab: Scrollbare Liste mit RecyclerView anzeigen
- Codelab: Grundlagen von RecyclerView