Dynamische Liste anpassen Teil von Android Jetpack.

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

Sie können RecyclerView-Objekte an Ihre spezifischen Anforderungen anpassen. Die unter Dynamische Listen mit RecyclerView erstellen beschriebenen Standardklassen bieten alle Funktionen, die die meisten Entwickler benötigen. In vielen Fällen müssen Sie lediglich die Ansicht für jeden Inhaber der Ansicht entwerfen und den Code zum Aktualisieren dieser Ansichten mit den entsprechenden Daten schreiben. 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 nicht mehr für den Nutzer sichtbar sind. Um eine Ansicht wiederzuverwenden oder wiederzuverwenden, fordert ein Layout-Manager den Adapter möglicherweise auf, den Inhalt der Ansicht durch ein anderes Element aus dem Dataset zu ersetzen. Wenn Sie Ansichten auf diese Weise wiederverwenden, wird die Leistung verbessert, weil unnötige Aufrufe oder kostspielige findViewById()-Lookups vermieden werden. Die Android Support Library umfasst drei Standard-Layout-Manager, von denen der viele Anpassungsoptionen bietet:

  • LinearLayoutManager: Die Elemente werden in einer eindimensionalen Liste angeordnet. Die Verwendung von RecyclerView mit LinearLayoutManager bietet Funktionen wie ein ListView-Layout.
  • GridLayoutManager: Die Elemente werden in einem zweidimensionalen Raster angeordnet, ähnlich wie die Quadrate auf einem Schachbrett. Die Verwendung von RecyclerView mit GridLayoutManager bietet Funktionen wie ein GridView-Layout.
  • StaggeredGridLayoutManager: Die Elemente werden in einem zweidimensionalen Raster angeordnet, wobei jede Spalte leicht von der vorherigen Spalte versetzt ist, wie die Sterne auf einer amerikanischen Flagge.

Wenn diese Layout-Manager nicht Ihren Anforderungen entsprechen, können Sie Ihre eigene erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager erweitern.

Elementanimationen hinzufügen

Wenn sich ein Element ändert, verwendet RecyclerView einen Animator, um seine Darstellung zu ändern. Dieser Animator ist ein Objekt, das die abstrakte RecyclerView.ItemAnimator-Klasse erweitert. Standardmäßig verwendet RecyclerView für die Animation DefaultItemAnimator. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie ein eigenes Animatorobjekt definieren, indem Sie RecyclerView.ItemAnimator erweitern.

Auswahl von Listenelementen aktivieren

In der Bibliothek recyclerview-selection können Nutzer per Touch- oder Mauseingabe Elemente in einer RecyclerView-Liste auswählen. So behalten Sie die Kontrolle über die visuelle Darstellung eines ausgewählten Elements. Sie haben auch weiterhin die Kontrolle über Richtlinien, die das Auswahlverhalten steuern, z. B. welche Elemente auswählbar sind und wie viele Elemente ausgewählt werden können.

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

  1. Bestimmen Sie, welchen Auswahlschlüsseltyp verwendet werden soll, und erstellen Sie dann ein ItemKeyProvider.

    Es gibt drei Schlüsseltypen, 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 anhand eines MotionEvent. Es ist quasi eine Factory für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder aus dieser extrahiert werden.

  4. Aktualisieren Sie die View-Objekte von Artikeln in RecyclerView entsprechend, um anzugeben, ob der Nutzer sie auswählt oder nicht.

    Die Auswahlbibliothek bietet keine standardmäßige visuelle Gestaltung für die ausgewählten Elemente. Geben Sie diese an, wenn Sie onBindViewHolder() implementieren. Wir empfehlen das folgende Vorgehen:

    • 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 den Stil der Ansicht so, dass er dem Status „Aktiviert“ entspricht. Zum Konfigurieren des Stils empfehlen wir die Verwendung einer Liste für den Farbstatus.
  5. Stellen Sie dem Nutzer mit ActionMode Tools zur Verfügung, mit denen er eine Aktion für die Auswahl ausführen kann.
  6. Registrieren Sie ein SelectionTracker.SelectionObserver, um benachrichtigt zu werden, wenn sich eine Auswahl ändert. Wenn eine Auswahl zum ersten Mal erstellt wird, starten Sie ActionMode, um dies dem Nutzer zu präsentieren und auswahlspezifische Aktionen anzubieten. Sie können beispielsweise der Leiste ActionMode eine Löschschaltfläche hinzufügen und den Zurückpfeil auf der Leiste verbinden, um die Auswahl zu löschen. Wenn die Auswahl leer wird und der Nutzer die Auswahl beim letzten Mal löscht, musst du den Aktionsmodus beenden.

  7. Führen Sie alle interpretierten sekundären Aktionen aus.
  8. Am Ende der Pipeline für die Ereignisverarbeitung stellt die Bibliothek möglicherweise fest, 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. Stellen Sie alles mit SelectionTracker.Builder zusammen.
  10. Das folgende Beispiel zeigt, wie diese Teile zusammengefügt werden:

    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();
        

    Zum Erstellen einer SelectionTracker-Instanz muss Ihre Anwendung denselben RecyclerView.Adapter-Wert bereitstellen, mit dem Sie RecyclerView für SelectionTracker.Builder initialisieren. Daher sollten Sie die SelectionTracker-Instanz nach dem Erstellen in Ihre RecyclerView.Adapter einfügen. Andernfalls können Sie den Status eines Elements nicht über die Methode onBindViewHolder() prüfen.

  11. Auswahl in Ereignisse im Aktivitätslebenszyklus einschließen.
  12. Damit der Auswahlstatus über alle Ereignisse im Aktivitätslebenszyklus hinweg beibehalten wird, muss Ihre App die Methoden onSaveInstanceState() und onRestoreInstanceState() des Auswahl-Trackers über die Methoden onSaveInstanceState() bzw. onRestoreInstanceState() der Aktivität aufrufen. Außerdem muss die App dem SelectionTracker.Builder-Konstruktor eine eindeutige Auswahl-ID zur Verfügung stellen. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehr als eine eindeutige, auswählbare Liste haben kann, die alle in ihrem gespeicherten Status beibehalten werden müssen.

Weitere Informationen

Weitere Informationen finden Sie in den folgenden Referenzen.