Dynamische Liste anpassen   Teil von Android Jetpack.

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie in „Compose“ mit Layouts 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 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 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. 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 diese Wiederverwendung von Ansichten wird die Leistung verbessert, da keine unnötigen Ansichten erstellt oder teure findViewById()-Suchen ausgeführt werden müssen. Die Android-Supportbibliothek enthält drei Standard-Layoutmanager, die jeweils viele Anpassungsoptionen bieten:

  • LinearLayoutManager:ordnet die Elemente in einer eindimensionalen Liste an. Die Verwendung von 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 RecyclerView DefaultItemAnimator, um die Animation bereitzustellen. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie ein eigenes Animationsobjekt 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 behalten Sie die Kontrolle über die visuelle Darstellung eines ausgewählten Elements. Sie können auch die Richtlinien steuern, 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 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. Implementiere ItemDetailsLookup.
  3. Mit ItemDetailsLookup kann die Auswahlbibliothek auf Informationen zu RecyclerView-Elementen zugreifen, die eine MotionEvent haben. Es ist im Grunde eine Factory für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder aus ihr 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 Standarddekoration 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 den Stil der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Liste mit Farbstatusressourcen zu verwenden, um das Styling zu konfigurieren.
  5. Verwende ActionMode, um dem Nutzer Tools zum Ausführen einer Aktion für die Auswahl zur Verfügung zu stellen.
  6. Registriere einen SelectionTracker.SelectionObserver, der benachrichtigt wird, 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ührt interpretierte sekundäre 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 Referenzen.