Dynamische Liste anpassen   Teil von Android Jetpack.

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie mit Layouts in Compose arbeiten.

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 View-Holder entwerfen und den Code schreiben, um diese Ansichten mit den entsprechenden Daten zu aktualisieren. Wenn Ihre App jedoch spezielle 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 wiederzuverwerten, kann ein Layoutmanager den Adapter bitten, den Inhalt der Ansicht durch ein anderes Element aus dem Dataset zu ersetzen. Durch das Wiederverwenden von Ansichten wird die Leistung verbessert, da unnötige Ansichten nicht erstellt werden müssen und keine aufwendigen findViewById()-Suchvorgänge erforderlich sind. Die Android-Supportbibliothek enthält drei Standard-Layoutmanager, die jeweils viele Anpassungsoptionen bieten:

  • LinearLayoutManager: ordnet die Elemente in einer eindimensionalen Liste an. Mit einer RecyclerView in Kombination mit LinearLayoutManager lässt sich ein Layout wie bei einer ListView erstellen.
  • GridLayoutManager: Ordnet die Elemente in einem zweidimensionalen Raster an, ähnlich wie die Felder auf einem Schachbrett. Wenn Sie ein RecyclerView mit GridLayoutManager verwenden, erhalten Sie eine ähnliche Funktionalität wie bei einem GridView-Layout.
  • StaggeredGridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wobei jede Spalte leicht von der vorherigen versetzt ist, 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.

Elementanimationen 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 RecyclerView DefaultItemAnimator für die Animation. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie Ihr 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 Mauseingabe auswählen. So behalten Sie die Kontrolle über die visuelle Darstellung eines ausgewählten Elements. Sie behalten auch die Kontrolle über Richtlinien, die das Auswahlverhalten steuern, z. B. welche Artikel für die Auswahl infrage kommen und wie viele Artikel ausgewählt werden können.

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

  1. Legen Sie fest, welchen Auswahl-Schlüsseltyp Sie verwenden möchten, und erstellen Sie dann ein ItemKeyProvider.

    Es gibt drei wichtige Typen, 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. ItemDetailsLookup ermöglicht der Auswahlbibliothek den Zugriff auf Informationen zu RecyclerView-Elementen, die durch eine MotionEvent angegeben werden. Sie ist im Grunde eine Factory für ItemDetails-Instanzen, die durch eine RecyclerView.ViewHolder-Instanz gesichert oder aus ihr extrahiert werden.

  4. Aktualisieren Sie View-Objekte im RecyclerView, um 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 dies an, wenn Sie onBindViewHolder() implementieren. Wir empfehlen Folgendes:

    • Rufen Sie 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, für die Konfiguration des Stylings eine Ressource für die Farbzusammenfassung zu verwenden.
  5. Verwenden Sie ActionMode, um dem Nutzer Tools zum Ausführen einer Aktion für die Auswahl zur Verfügung zu stellen.
  6. Registrieren Sie ein SelectionTracker.SelectionObserver , um benachrichtigt zu werden, wenn sich eine Auswahl ändert. Wenn eine Auswahl 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 verbinden, dass die Auswahl aufgehoben wird. Wenn die Auswahl leer wird, z. B. wenn der Nutzer die Auswahl beim letzten Mal löscht, 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 zu aktivieren, indem er darauf tippt, oder ein Element oder eine Gruppe ausgewählter Elemente zu ziehen. Reagiere auf diese Interpretationen, indem du den entsprechenden Listener registrierst. Weitere Informationen finden Sie unter SelectionTracker.Builder.

  9. Stellen Sie alles mit SelectionTracker.Builder zusammen.
  10. Das folgende Beispiel zeigt, wie Sie diese Elemente kombinieren:

    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, die Sie zum Initialisieren von RecyclerView auf SelectionTracker.Builder verwenden. Daher müssen Sie die SelectionTracker-Instanz nach der Erstellung in Ihre RecyclerView.Adapter einfügen. Andernfalls können Sie den ausgewählten Status eines Elements nicht über die onBindViewHolder()-Methode prüfen.

  11. Die Auswahl wird in die Ereignisse des Aktivitätslebenszyklus aufgenommen.
  12. Damit der Auswahlstatus über die Ereignisse des Aktivitätslebenszyklus hinweg erhalten bleibt, muss Ihre App die Methoden onSaveInstanceState() und onRestoreInstanceState() des Auswahl-Trackers aus den Methoden onSaveInstanceState() und onRestoreInstanceState() der Aktivität aufrufen. Ihre App muss außerdem eine eindeutige Auswahl-ID für den SelectionTracker.Builder-Konstruktor bereitstellen. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehrere unterschiedliche, auswählbare Listen haben kann, die alle in ihrem gespeicherten Zustand beibehalten werden müssen.

Zusätzliche Ressourcen

Weitere Informationen finden Sie in den folgenden Referenzen.