Dostosuj listę dynamiczną Zawiera Android Jetpack.

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak korzystać z układów w funkcji Utwórz

Możesz dostosować RecyclerView obiektów do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie list dynamicznych za pomocą RecyclerView zapewniają wszystkie funkcje, których większość deweloperów potrzebuje. W wielu przypadkach wystarczy tylko zaprojektować widok dla każdego właściciela widoku i napisać kod, aby zaktualizować te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma konkretne wymagania, możesz zmienić standardowe działanie na kilka sposobów. W tym dokumencie opisujemy niektóre możliwe dostosowania.

Modyfikowanie układu

RecyclerView używa menedżera układu do pozycjonowania poszczególnych elementów na ekranie i określania, kiedy ponownie wykorzystać widoki elementów, które nie są już widoczne dla użytkownika. Aby ponownie wykorzystać widok, czyli recykling, menedżer układu może poprosić adaptera o zastąpienie zawartości widoku innym elementem ze zbioru danych. Ten sposób poprawia wydajność dzięki uniknięciu tworzenia zbędnych widoków i wykonywania kosztownych wyszukiwańfindViewById(). Biblioteka pomocy Androida zawiera trzy menedżery układu standardowego, z których każdy ma wiele opcji dostosowania:

  • LinearLayoutManager: uporządkuje elementy na jednowymiarowej liście. Użycie RecyclerView z LinearLayoutManager zapewnia funkcje takie jak układ ListView.
  • GridLayoutManager: uporządkuje elementy w dwuwymiarowej siatce, tak jak kwadraty na szachownicy. Użycie właściwości RecyclerView z GridLayoutManager zapewnia takie funkcje jak układ GridView.
  • StaggeredGridLayoutManager: uporządkuje elementy w dwuwymiarowej siatce, a każda kolumna jest nieco odsunięta od poprzedniej, tak jak gwiazdki na amerykańskiej flagie.

Jeśli te menedżery układu nie odpowiadają Twoim potrzebom, możesz utworzyć własny, rozszerzając klasę abstrakcyjną RecyclerView.LayoutManager.

Dodaj animacje elementów

Za każdym razem, gdy element się zmienia, RecyclerView korzysta z animatora, aby zmienić jego wygląd. Animator to obiekt, który rozszerza abstrakcyjną klasę RecyclerView.ItemAnimator. Domyślnie RecyclerView używa DefaultItemAnimator do wygenerowania animacji. Jeśli chcesz użyć niestandardowych animacji, możesz zdefiniować własny obiekt animatora, rozszerzając RecyclerView.ItemAnimator.

Włącz wybieranie elementów z listy

Biblioteka recyclerview-selection umożliwia użytkownikom wybieranie elementów z listy RecyclerView za pomocą dotyku lub myszy. Dzięki temu masz kontrolę nad wizualną prezentacją wybranego elementu. Możesz też zachować kontrolę nad zasadami kontrolującymi sposób wyboru, np. nad tym, które elementy można wybrać i ile elementów można wybrać.

Aby dodać obsługę wyboru do instancji RecyclerView, wykonaj te czynności:

  1. Określ typ klucza wyboru, którego chcesz użyć, a następnie utwórz ItemKeyProvider.

    Istnieją 3 typy kluczowych, których można użyć do identyfikacji wybranych elementów:

    Szczegółowe informacje o typach kluczy wyboru znajdziesz w sekcji SelectionTracker.Builder.

  2. Wdróż ItemDetailsLookup.
  3. ItemDetailsLookup umożliwia bibliotece wyboru informacje o elementach RecyclerView z określoną wartością MotionEvent. W praktyce jest to fabryka instancji ItemDetails z kopią zapasową instancji RecyclerView.ViewHolder lub z niej wyodrębnianych.

  4. Zaktualizuj obiekty View elementu w RecyclerView, aby określić, czy użytkownik je zaznacza czy odznacza.

    Biblioteka wyboru nie zapewnia domyślnej dekoracji wizualnej wybranych elementów. Podaj go podczas wdrażania onBindViewHolder(). Zalecamy następujące podejście:

    • W onBindViewHolder() wywołaj setActivated(), a nie setSelected(), do obiektu View z poleceniem true lub false w zależności od tego, czy ten element jest wybrany.
    • Zaktualizuj styl widoku, tak aby odzwierciedlał stan aktywacji. Do konfigurowania stylu zalecamy użycie zasobu z listą stanów kolorów.
  5. Użyj ActionMode, aby udostępnić użytkownikowi narzędzia do wykonania wybranego działania.
  6. Zarejestruj SelectionTracker.SelectionObserver, aby otrzymywać powiadomienia, gdy wybór się zmieni. Po utworzeniu wyboru uruchom polecenie ActionMode, aby zaprezentować je użytkownikowi i wykonać związane z nim działania. Możesz na przykład dodać przycisk usuwania do paska ActionMode i połączyć na nim strzałkę wstecz, aby wyczyścić wybór. Gdy wybór stanie się pusty (jeśli użytkownik anuluje go ostatnio), zakończ tryb działania.

  7. Wykonanie wszelkich zinterpretowanych działań dodatkowych.
  8. Na końcu potoku przetwarzania zdarzeń biblioteka może określić, że użytkownik próbuje aktywować element, klikając go lub próbuje przeciągnąć element lub zestaw wybranych elementów. Aby reagować na te interpretacje, zarejestruj odpowiedniego detektora. Więcej informacji: SelectionTracker.Builder.

  9. Zmontuj wszystko za pomocą narzędzia SelectionTracker.Builder.
  10. Z przykładu poniżej dowiesz się, jak połączyć te elementy:

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

    Aby utworzyć instancję SelectionTracker, aplikacja musi dostarczać ten sam obiekt RecyclerView.Adapter, którego używasz do zainicjowania instancji RecyclerView w SelectionTracker.Builder. Dlatego po utworzeniu instancji SelectionTracker wstrzyknij ją do instancji RecyclerView.Adapter. W przeciwnym razie nie można sprawdzić wybranego stanu elementu za pomocą metody onBindViewHolder().

  11. Uwzględnij wybór w zdarzeniach cyklu życia działania.
  12. Aby zachować stan wyboru we wszystkich zdarzeniach cyklu życia aktywności, aplikacja musi wywoływać metody onSaveInstanceState() i onRestoreInstanceState() modułu śledzenia wyboru z metod onSaveInstanceState() i onRestoreInstanceState() odpowiednio aktywności. Aplikacja musi też dostarczać unikalny identyfikator wyboru do konstruktora SelectionTracker.Builder. Ten identyfikator jest wymagany, ponieważ aktywność lub fragment mogą mieć więcej niż 1 odrębną listę, którą można wybrać i która musi pozostać zapisana.

Dodatkowe materiały

Dodatkowe informacje znajdziesz w dalszej części tego artykułu.