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 anpassen RecyclerView um Ihre spezifischen Anforderungen zu erfüllen. 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 Viewholder entwerfen und den Code schreiben, um diese Ansichten mit den entsprechenden Daten zu aktualisieren. Wenn Ihre App jedoch spezifischen Anforderungen zu erfüllen, 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 Artikelansichten 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 das Recycling von Ansichten wird die Leistung verbessert, da das Erstellen unnötiger Ansichten oder teure findViewById()-Suchanfragen vermieden werden. Die Android-Supportbibliothek enthält drei Standard-Layoutmanager, die jeweils viele Anpassungsoptionen bieten:

  • LinearLayoutManager: Ordnet die Elemente in einer eindimensionalen Liste an. Mit einem RecyclerView mit LinearLayoutManager bietet Funktionen wie eine ListView Layout.
  • GridLayoutManager: die Elemente in einem zweidimensionalen Raster anordnen, wie die Quadrate auf einem Schachbrett. RecyclerView mit GridLayoutManager bietet Funktionen wie 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 Animationskünstler ist ein Objekt, das die abstrakte RecyclerView.ItemAnimator . Standardmäßig verwendet der RecyclerView DefaultItemAnimator für die Animation. Wenn Sie benutzerdefinierte Animationen bereitstellen möchten, können Sie ein 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 Maus auswählen. So haben Sie die Kontrolle über die visuelle Präsentation eines ausgewählten Elements. Sie können auch die Kontrolle über Richtlinien behalten, die die Auswahl steuern welche Elemente ausgewählt werden können und wie viele Elemente ausgewählt werden.

Wenn Sie einer RecyclerView-Instanz die Unterstützung für die Auswahl hinzufügen möchten, folgen Sie diese Schritte:

  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:

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

  2. Implementieren ItemDetailsLookup
  3. ItemDetailsLookup ermöglicht der Auswahlbibliothek Zugriff Informationen über RecyclerView Elemente mit einer MotionEvent Es ist eine Art „Fabrik“ für ItemDetails-Instanzen, die von einer RecyclerView.ViewHolder-Instanz gesichert oder daraus extrahiert werden.

  4. Artikel aktualisieren View Objekte in den RecyclerView, um anzugeben, ob der Nutzer hebt die Auswahl auf.

    Die Auswahlbibliothek bietet keine Standarddekoration für die ausgewählten Elemente. Geben Sie diese an, wenn Sie onBindViewHolder() Wir empfehlen den folgenden Ansatz:

    • Rufen Sie in onBindViewHolder() setActivated()nicht setSelected() – am View-Objekt mit true oder false, je nachdem, ob der Artikel ausgewählt ist.
    • Aktualisieren Sie das Design der Ansicht, um den aktivierten Status darzustellen. Wir empfehlen, eine Liste mit Farbstatusressourcen zu verwenden, um das Styling zu konfigurieren.
  5. ActionMode verwenden , um Nutzenden Tools an die Hand zu geben, mit denen sie eine Aktion für die Auswahl ausführen können.
  6. Registrieren Sie eine 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 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 wird, der Nutzer die beim letzten Mal ausgewählt – Aktionsmodus beenden.

  7. Führt interpretierte sekundäre Aktionen aus.
  8. Am Ende der Pipeline für die Ereignisverarbeitung ermittelt die Bibliothek möglicherweise, dass der Nutzer versucht, ein Element zu aktivieren, indem er darauf tippt, oder versuchen, ein Element oder eine Gruppe ausgewählter Elemente zu ziehen. Sie können auf diese Interpretationen reagieren, indem Sie den entsprechenden Listener registrieren. Weitere Informationen finden Sie unter SelectionTracker.Builder

  9. Alles mit SelectionTracker.Builder zusammensetzen
  10. Das folgende Beispiel zeigt, wie Sie diese Elemente 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 muss Ihre App dieselben RecyclerView.Adapter mit dem Sie RecyclerView initialisieren, SelectionTracker.Builder. Daher sollten Sie, nachdem Sie den SelectionTracker-Instanz einfügen, RecyclerView.Adapter. Andernfalls können Sie den ausgewählten Status eines Artikels nicht über die onBindViewHolder()-Methode prüfen.

  11. Auswahl in die Aktivität Lifecycle-Events.
  12. Damit der Auswahlstatus über alle Lebenszyklusereignisse der Aktivität hinweg beibehalten wird, muss die Methode onSaveInstanceState() und onRestoreInstanceState() aus der Aktivität onSaveInstanceState() und onRestoreInstanceState() . Ihre App muss außerdem eine eindeutige Auswahl-ID für den SelectionTracker.Builder-Konstruktor. Diese ID ist erforderlich, weil kann eine Aktivität oder ein Fragment mehr als eine unterschiedliche, auswählbare Liste, die alle in ihrem gespeicherten Zustand beibehalten werden müssen.

Weitere Informationen

Weitere Informationen finden Sie in den folgenden Referenzen.