Dostosowywanie listy dynamicznej Część stanowiąca część Androida 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 sekcji Utwórz

Możesz dostosować RecyclerViewobiekty do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie list dynamicznych za pomocą RecyclerView zapewniają wszystkie funkcje potrzebne większości deweloperów. W wielu przypadkach wystarczy tylko zaprojektować widok dla każdego z nich i napisać kod, by uzupełnić te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma określone wymagania, możesz na kilka sposobów zmodyfikować standardowe działanie. W tym dokumencie opisano niektóre z możliwych opcji dostosowania.

Modyfikowanie układu

RecyclerView używa menedżera układu do umieszczania poszczególnych elementów na ekranie i określania, kiedy ponownie użyć widoków elementów, które nie są już widoczne dla użytkownika. Aby ponownie wykorzystać widok lub odzyskać go, menedżer układu może poprosić adapter o zastąpienie jego zawartości innym elementem ze zbioru danych. Recykling widoków danych w ten sposób poprawia wydajność, ponieważ pozwala uniknąć tworzenia zbędnych widoków i kosztowania findViewById()wyszukiwania. Biblioteka pomocy Androida zawiera 3 standardowe menedżery układów, z których każdy ma wiele opcji dostosowywania:

  • LinearLayoutManager: porządkuje elementy na jednowymiarowej liście. Używanie RecyclerView z elementem LinearLayoutManager zapewnia takie funkcje jak układ ListView.
  • GridLayoutManager: rozmieszcza elementy w dwuwymiarowej siatce, takiej jak kwadraty na szachownicy. Używanie elementu RecyclerView z elementem GridLayoutManager zapewnia takie funkcje jak układ GridView.
  • StaggeredGridLayoutManager: elementy są układane w dwuwymiarową siatkę, a każda kolumna jest nieco odsunięta od poprzedniej, tak jak w przypadku gwiazd na flagi amerykańskiej.

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

Dodaj animacje elementu

Po każdej zmianie elementu RecyclerView używa animatora, aby zmienić jego wygląd. Ten animator to obiekt rozszerzający klasę abstrakcyjną RecyclerView.ItemAnimator. Domyślnie RecyclerView do wyświetlania animacji używa właściwości DefaultItemAnimator. Jeśli chcesz udostępnić animacje niestandardowe, możesz zdefiniować własny obiekt animatora, rozszerzając właściwość RecyclerView.ItemAnimator.

Włącz wybieranie elementów listy

Biblioteka recyclerview-selection umożliwia użytkownikom wybieranie elementów na liście RecyclerView za pomocą dotyku lub myszy. Dzięki temu zachowasz kontrolę nad wizualną prezentacją wybranego elementu. Możesz też zachować kontrolę nad zasadami, które określają zachowania użytkowników, np. które elementy kwalifikują się do wyboru i ile z nich 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ć, i utwórz ItemKeyProvider.

    Istnieją 3 rodzaje kluczy, których można używać do identyfikowania wybranych elementów:

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

  2. Wdróż ItemDetailsLookup.
  3. ItemDetailsLookup zapewnia bibliotece wyboru dostęp do informacji o RecyclerView elementach, którym przyznano uprawnienie MotionEvent. Jest to fabryka instancji ItemDetails, z których kopie zapasowe są tworzone w instancji RecyclerView.ViewHolder lub z których zostały wyodrębnione.

  4. Zaktualizuj obiekty View elementu w RecyclerView, aby określić, czy użytkownik je wybrał czy odznaczył.

    Biblioteka wyboru nie zapewnia domyślnej wizualnej dekoracji wybranych elementów. Podaj je podczas implementacji interfejsu onBindViewHolder(). Zalecamy takie podejście:

    • W onBindViewHolder() wywołaj setActivated(), a nie setSelected() – na obiekcie View z true lub false, w zależności od tego, czy ten element jest wybrany.
    • Zaktualizuj styl widoku, by odzwierciedlić stan aktywacji. Do skonfigurowania stylu zalecamy użycie zasobu listy stanów kolorów.
  5. Użyj narzędzia ActionMode, aby udostępnić użytkownikowi narzędzia do wykonania działania związanego z zaznaczonymi elementami.
  6. Zarejestruj SelectionTracker.SelectionObserver, aby otrzymywać powiadomienia o zmianie wyboru. Gdy utworzysz wybór, uruchom polecenie ActionMode, aby przedstawić go użytkownikowi i określić działania związane z jego wyborem. Możesz na przykład dodać przycisk usuwania do paska ActionMode i połączyć znajdującą się na nim strzałkę wstecz, aby wyczyścić zaznaczenie. Gdy wybór stanie się pusty (jeśli użytkownik zaznaczy je po raz ostatni), zakończ tryb działania.

  7. Wykonaj dowolne zinterpretowane działania dodatkowe.
  8. Na koniec potoku przetwarzania zdarzeń biblioteka może określić, że użytkownik próbuje aktywować element, klikając go, lub przeciągając element bądź zbiór wybranych elementów. Reaguj na te interpretacje, rejestrując odpowiedniego słuchacza. Więcej informacji: SelectionTracker.Builder.

  9. Złóż wszystko za pomocą usługi SelectionTracker.Builder.
  10. Ten przykład pokazuje, jak złożyć te elementy w jedną całość:

    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 można było utworzyć instancję SelectionTracker, aplikacja musi dostarczyć ten sam parametr RecyclerView.Adapter, którego używasz do zainicjowania RecyclerView w SelectionTracker.Builder. Z tego względu po utworzeniu instancji SelectionTracker wstrzyknij ją w RecyclerView.Adapter. W przeciwnym razie nie można sprawdzić stanu wybranego elementu za pomocą metody onBindViewHolder().

  11. Uwzględnij wybór w zdarzeniach cyklu życia aktywności.
  12. Aby zachować stan wyboru w przypadku wszystkich zdarzeń cyklu życia aktywności, aplikacja musi wywoływać metody onSaveInstanceState() i onRestoreInstanceState() modułu śledzenia wyboru odpowiednio z metod onSaveInstanceState() i onRestoreInstanceState() aktywności. Aplikacja musi też podawać unikalny identyfikator wyboru do konstruktora SelectionTracker.Builder. Ten identyfikator jest wymagany, ponieważ aktywność lub fragment może mieć więcej niż 1 odrębną listę z możliwością wyboru, która musi zostać zachowana w zapisanym stanie.

Dodatkowe materiały

Dodatkowe informacje znajdziesz poniżej.