Benutzerdefinierte dynamische Liste   Teil von Android Jetpack.

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Informationen zum Arbeiten mit Layouts in Compose

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 Viewholder 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 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. Die Verwendung einer RecyclerView mit LinearLayoutManager bietet Funktionen wie ein ListView-Layout.
  • GridLayoutManager:ordnet die Elemente in einem zweidimensionalen Raster an, ähnlich wie die Quadrate auf einem Schachbrett. Die Verwendung einer RecyclerView mit einer GridLayoutManager bietet Funktionen wie ein GridView-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 die 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 das Auswahlverhalten steuern, z. B. welche Elemente ausgewählt werden können und wie viele.

So fügen Sie einer RecyclerView-Instanz die Auswahlfunktion hinzu:

  1. 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:

    Ausführliche Informationen zu Auswahlschlüsseltypen finden Sie unter SelectionTracker.Builder.

  2. Implementieren Sie ItemDetailsLookup.
  3. Mit ItemDetailsLookup kann die Auswahlbibliothek auf Informationen zu RecyclerView-Elementen zugreifen, die eine MotionEvent haben. Es ist eine Art „Fabrik“ für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder daraus extrahiert werden.

  4. Aktualisiere die ArtikelView-Objekte im RecyclerView, um anzuzeigen, ob der Nutzer sie ausgewählt oder die Auswahl aufgehoben hat.

    Die Auswahlbibliothek bietet keine Standardvisualisierung für die ausgewählten Elemente. Geben Sie diese Informationen an, wenn Sie onBindViewHolder() implementieren. Wir empfehlen Folgendes:

    • Rufe in onBindViewHolder() setActivated() – nicht setSelected() – für das View-Objekt mit true oder false auf, je nachdem, ob das Element 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.
  5. Verwenden Sie ActionMode, um Nutzern Tools zur Ausführung einer Aktion für die Auswahl zur Verfügung zu stellen.
  6. 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 ist, also der Nutzer die Auswahl zum letzten Mal gelöscht hat, beenden Sie den Aktionsmodus.

  7. Führen Sie alle interpretierten sekundären Aktionen aus.
  8. 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.

  9. Stellen Sie alles mit SelectionTracker.Builder zusammen.
  10. 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.

  11. Fügen Sie die Auswahl in die Ereignisse des Aktivitätslebenszyklus ein.
  12. 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 Quellen.