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.
<ph type="x-smartling-placeholder"></ph> Lazy Listen und Raster →

Sie können anpassen RecyclerView um Ihre spezifischen Anforderungen zu erfüllen. Die in diesem Dokument beschriebenen Standardklassen Dynamische Listen erstellen mit RecyclerView bietet alle Funktionen, die die meisten Entwickler benötigen. In In vielen Fällen müssen Sie nur die Ansicht für jeden Ansichtshalter entwerfen und die 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 Position der Elemente auf dem Bildschirm zu sehen und zu ermitteln, wann Artikelansichten wiederverwendet werden können, die nicht mehr für den Nutzer sichtbar sind. Um eine Ansicht, ein Layout wiederzuverwenden oder zu recyceln, fordert der Manager den Adapter möglicherweise an, den Inhalt der Ansicht durch einen anderen Element aus dem Dataset. So wird das Recycling von Ansichten verbessert indem Sie unnötige Aufrufe vermeiden oder teuer findViewById() Suchvorgängen. Die Android Support Library umfasst drei Standard-Layoutmanager: das viele Anpassungsoptionen bietet:

  • 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 jede Spalte leicht versetzt ist wie die Sterne auf einer amerikanischen Flagge.

Wenn diese Layout-Manager nicht Ihren Anforderungen entsprechen, können Sie Ihre eigenen erstellen, indem Sie das Erweitern der RecyclerView.LayoutManager abstrakte Klasse.

Elementanimationen hinzufügen

Immer wenn sich ein Element ändert, verwendet RecyclerView einen Animator um die Darstellung zu ändern. Dieser Animator 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 können Sie Ihr eigenes Animationsobjekt definieren, indem Sie RecyclerView.ItemAnimator

Auswahl von Listenelementen aktivieren

Die recyclerview-selection können Nutzer Elemente in einer RecyclerView-Liste per Berührung auswählen. oder Mauseingabe. So behalten Sie die Kontrolle über die visuelle Darstellung eines ausgewähltes Element. 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. Bestimmen Sie, welchen Auswahlschlüsseltyp Sie verwenden möchten, und erstellen Sie dann einen ItemKeyProvider

    Es gibt drei Schlüsseltypen, 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 praktisch eine Fabrik für ItemDetails Instanzen, die gesichert oder aus einem RecyclerView.ViewHolder Instanz.

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

    Die Auswahlbibliothek bietet keine standardmäßige visuelle Gestaltung ausgewählten Elementen. 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 den Stil der Ansicht so, dass er den aktivierten Status darstellt. Mi. empfehlen wir, ein Farbstatus list resource, um den Stil 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 ein SelectionTracker.SelectionObserver , um benachrichtigt zu werden, wenn sich eine Auswahl ändert. Wenn Sie eine Auswahl erstellen, ActionMode starten, um dies dem Nutzer zu präsentieren und auswahlspezifischen Aktionen. Sie können beispielsweise eine Löschschaltfläche zur ActionMode-Balken und verbinde sie mit dem Zurück-Pfeil auf der Leiste, um die Auswahl zu löschen ausgewählt haben. 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. Auf diese reagieren Interpretationen durch Registrierung des entsprechenden Listeners. 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();
        

    Um eine SelectionTracker muss Ihre Anwendung 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 die den ausgewählten Status der Methode onBindViewHolder().

  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.