Dynamische Liste anpassen   Teil von Android Jetpack.

Die Compose-Methode
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 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 Sie RecyclerView mit LinearLayoutManager verwenden, erhalten Sie Funktionen wie bei einem ListView Layout.
  • GridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wie die Quadrate auf einem Schachbrett. Wenn Sie ein RecyclerView mit GridLayoutManager verwenden, erhalten Sie Funktionen 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 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:

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

    Weitere Informationen zu Auswahlschlüsseltypen finden Sie unter SelectionTracker.Builder.

  2. Implement ItemDetailsLookup.
  3. 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.

  4. Aktualisieren Sie die Elemente View Objekte in den 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 diese an, wenn Sie implementierenonBindViewHolder(). Wir empfehlen den folgenden Ansatz:

    • 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 Styling der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Farbstatusliste Ressource zu verwenden, um das Styling zu konfigurieren.
  5. Verwenden Sie ActionMode , um dem Nutzer Tools zur Verfügung zu stellen, mit denen er eine Aktion für die Auswahl ausführen kann.
  6. 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.

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

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

  11. Auswahl in die Ereignisse des Aktivitätslebenszyklus einbeziehen
  12. 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.