Dynamische Liste anpassen Teil von Android Jetpack.

Schreiben Sie jetzt
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 unter 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 Ansichtsinhaber entwerfen und den Code schreiben, um diese Ansichten mit den entsprechenden Daten zu aktualisieren. Wenn Ihre Anwendung 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. Um eine Ansicht wiederzuverwenden oder zu recyceln, kann ein Layoutmanager den Adapter auffordern, den Inhalt der Ansicht durch ein anderes Element aus dem Dataset 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 Support Library umfasst drei standardmäßige Layout-Manager, von denen jeder viele Anpassungsoptionen bietet:

  • 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 von RecyclerView mit GridLayoutManager bietet Funktionen wie ein GridView-Layout.
  • StaggeredGridLayoutManager: ordnet die Elemente in einem zweidimensionalen Raster an, wobei jede Spalte leicht vom vorherigen Element entfernt ist, wie die Sterne auf einer amerikanischen Flagge.

Wenn diese Layoutmanager nicht Ihren Anforderungen entsprechen, können Sie Ihre eigenen erstellen, indem Sie die abstrakte Klasse RecyclerView.LayoutManager erweitern.

Elementanimationen hinzufügen

Immer wenn sich ein Element ändert, verwendet RecyclerView einen Animator, um seine Darstellung 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

In der Bibliothek recyclerview-selection können Nutzer Elemente in einer RecyclerView-Liste per Berührung 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 Auswahlunterstützung hinzu:

  1. Bestimmen Sie, welchen Auswahlschlüsseltyp Sie verwenden möchten, und erstellen Sie dann eine 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. Implementiere ItemDetailsLookup.
  3. Mit ItemDetailsLookup kann die Auswahlbibliothek auf Informationen über RecyclerView-Elemente mit einem MotionEvent zugreifen. Es ist im Grunde eine Factory für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder aus ihr extrahiert werden.

  4. Aktualisieren Sie die View-Objekte von Elementen in der RecyclerView, um anzugeben, ob der Nutzer diese ausgewählt oder die Auswahl aufgehoben hat.

    Die Auswahlbibliothek bietet keine standardmäßige visuelle Gestaltung für die ausgewählten Elemente. Gib diese an, wenn du onBindViewHolder() implementierst. 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 den Stil der Ansicht so, dass er den aktivierten Status darstellt. Wir empfehlen, zum Konfigurieren des Stils eine Ressourcen für die Farbstatusliste zu verwenden.
  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 neu erstellt wird, starte ActionMode, um sie dem Nutzer zu präsentieren und auswahlspezifische Aktionen auszuführen. Sie können beispielsweise der Leiste ActionMode eine Schaltfläche zum Löschen hinzufügen und den Zurück-Pfeil auf der Leiste verbinden, um die Auswahl zu löschen. Wenn die Auswahl leer wird und der Nutzer sie beim letzten Mal löscht, wird der Aktionsmodus beendet.

  7. Führt interpretierte sekundäre Aktionen aus.
  8. Am Ende der Ereignisverarbeitungspipeline stellt die Bibliothek möglicherweise fest, dass der Nutzer versucht, ein Element zu aktivieren, indem er darauf tippt oder ein Element oder eine Gruppe ausgewählter Elemente in die gewünschte Richtung zieht. Reagieren Sie auf diese Interpretationen, indem Sie den entsprechenden Listener registrieren. Weitere Informationen finden Sie unter SelectionTracker.Builder.

  9. Mit SelectionTracker.Builder kannst du alles zusammenstellen.
  10. Das folgende Beispiel zeigt, wie diese Teile zusammengesetzt 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 dasselbe RecyclerView.Adapter angeben, mit dem Sie RecyclerView auf SelectionTracker.Builder initialisieren. Aus diesem Grund fügen Sie die SelectionTracker-Instanz nach dem Erstellen in die RecyclerView.Adapter ein. Andernfalls können Sie den ausgewählten Status eines Elements nicht über die Methode onBindViewHolder() prüfen.

  11. Nehmen Sie die Auswahl in die Lebenszyklusereignisse der Aktivität auf.
  12. Damit der Auswahlstatus über alle Lebenszyklusereignisse der Aktivität hinweg erhalten bleibt, muss Ihre App die Methoden onSaveInstanceState() und onRestoreInstanceState() des Auswahl-Trackers aus den Methoden onSaveInstanceState() und onRestoreInstanceState() der Aktivität aufrufen. Außerdem muss deine App dem SelectionTracker.Builder-Konstruktor eine eindeutige Auswahl-ID bereitstellen. Diese ID ist erforderlich, da eine Aktivität oder ein Fragment mehr als eine unterschiedliche, auswählbare Liste haben kann, die alle in ihrem gespeicherten Status beibehalten werden müssen.

Zusätzliche Ressourcen

Weitere Informationen finden Sie in den folgenden Referenzen.