Dynamische Liste anpassen Teil von Android Jetpack.
RecyclerView-Objekte können an Ihre spezifischen Anforderungen angepasst werden. 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 einListViewLayout.GridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wie die Felder auf einem Schachbrett. Wenn Sie einRecyclerViewmitGridLayoutManagerverwenden, erhalten Sie Funktionen wie einGridViewLayout.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 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 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 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 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 bereitzustellen. 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 wird – wenn der Nutzer die
Auswahl zum letzten Mal aufhebt – beenden Sie den Aktionsmodus.
Am Ende der Pipeline für die Ereignisverarbeitung kann die Bibliothek feststellen,
dass der Nutzer versucht, ein Element zu aktivieren, indem er darauf tippt, 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
an
SelectionTracker.Builder übergeben, den Sie zum Initialisieren von RecyclerView verwenden. Daher 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