Dostosowywanie listy dynamicznej   Należy do Jetpacka na Androida.

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak pracować z układami w Compose.

Obiekty RecyclerView możesz dostosowywać do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie dynamicznych list za pomocą RecyclerView zapewniają wszystkie funkcje, których potrzebuje większość programistów. W wielu przypadkach wystarczy zaprojektować widok dla każdego elementu widoku i napisać kod, który zaktualizuje te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma określone wymagania, możesz zmodyfikować standardowe działanie na kilka sposobów. W tym dokumencie opisujemy niektóre możliwe opcje dostosowywania.

Modyfikowanie układu

RecyclerView używa menedżera układu do umieszczania poszczególnych elementów na ekranie i określania, kiedy można ponownie użyć widoków elementów, które nie są już widoczne dla użytkownika. Aby ponownie użyć (czyli przetworzyć) widok, menedżer układu może poprosić adapter o zastąpienie zawartości widoku innym elementem z zbioru danych. Takie odzyskiwanie widoków poprawia wydajność, ponieważ zapobiega tworzeniu niepotrzebnych widoków i drogim zapytaniomfindViewById(). Biblioteka Android Support Library zawiera 3 standardowe menedżery układu, z których każdy oferuje wiele opcji dostosowywania:

  • LinearLayoutManager: sortuje elementy w liście jednowymiarowej. Użycie RecyclerView z LinearLayoutManager zapewnia funkcjonalność podobną do układu ListView.
  • GridLayoutManager: układa elementy w dwujęzycznej siatce, jak pola na szachownicy. Użycie RecyclerViewGridLayoutManager zapewnia funkcjonalność podobną do układu GridView.
  • StaggeredGridLayoutManager: układa elementy w dwudwumiarowej siatce, przy czym każda kolumna jest nieco przesunięta w stosunku do poprzedniej, jak gwiazdy na fladze Stanów Zjednoczonych.

Jeśli te menedżery układu nie spełniają Twoich wymagań, możesz utworzyć własnego, rozszerzając abstrakcyjną klasę RecyclerView.LayoutManager.

Dodawanie animacji elementów

Gdy element się zmienia, RecyclerView używa animatora, aby zmienić jego wygląd. Ten animator jest obiektem, który rozszerza abstrakcyjną klasę RecyclerView.ItemAnimator. Domyślnie RecyclerView używa DefaultItemAnimator do wyświetlania animacji. Jeśli chcesz udostępnić animacje niestandardowe, możesz zdefiniować własny obiekt animatora, rozszerzając klasę RecyclerView.ItemAnimator.

Włączanie wyboru pozycji na liście

Biblioteka recyclerview-selection pozwala użytkownikom wybierać elementy na liście RecyclerView za pomocą ekranu dotykowego lub myszy. Dzięki temu możesz zachować kontrolę nad wizualną prezentacją wybranego elementu. Możesz też zachować kontrolę nad zasadami regulującymi sposób wyboru, na przykład które elementy są kwalifikowane do wyboru i ile elementów można wybrać.

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

  1. Zdecyduj, którego typu klucza wyboru użyć, a następnie utwórz ItemKeyProvider.

    Do identyfikowania wybranych elementów możesz używać 3 rodzajów kluczy:

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

  2. Wdróż ItemDetailsLookup.
  3. ItemDetailsLookup pozwala bibliotece wyboru uzyskać dostęp do informacji o elementach RecyclerView pod warunkiem, że MotionEvent. Jest to fabryka instancji ItemDetails, które są kopiami zapasowymi lub wyodrębnieniami instancji RecyclerView.ViewHolder.

  4. Zaktualizuj obiekty View w elementach RecyclerView, aby odzwierciedlić, czy użytkownik je wybrał, czy odznaczył.

    Biblioteka elementów nie zawiera domyślnej dekoracji wizualnej dla wybranych elementów. Podaj te informacje podczas implementacji.onBindViewHolder() Zalecamy następujące podejście:

    • W funkcji onBindViewHolder() wywołaj funkcję setActivated()nie setSelected()—na obiekcie View za pomocą funkcji true lub false, w zależności od tego, czy element jest wybrany.
    • Zaktualizuj styl widoku, aby odzwierciedlał stan aktywacji. Zalecamy użycie zasobu listy stanów kolorów do skonfigurowania stylizacji.
  5. Użyj elementu ActionMode, aby udostępnić użytkownikowi narzędzia do wykonania działania na zaznaczonym elemencie.
  6. Zarejestruj się SelectionTracker.SelectionObserver aby otrzymywać powiadomienia o zmianach w wyborze. Gdy po raz pierwszy zostanie utworzony wybór,ActionMode zacznij prezentować go użytkownikowi i zapewniaj mu możliwość wykonywania działań związanych z wyborem. Możesz na przykład dodać do paska ActionMode przycisk usuwania i połączyć go z strzałką wstecz, aby anulować wybór. Gdy wybór stanie się pusty (czyli użytkownik wyczyścił go ostatni raz), zakończ tryb działania.

  7. wykonywać interpretowane działania dodatkowe.
  8. Na końcu potoku przetwarzania zdarzeń biblioteka może stwierdzić, że użytkownik próbuje aktywować element, klikając go, lub próbuje przeciągnąć element lub zestaw wybranych elementów. Reaguj na te interpretacje, rejestrując odpowiednich słuchaczy. Więcej informacji znajdziesz na stronie SelectionTracker.Builder.

  9. Zmontuj wszystko za pomocą SelectionTracker.Builder.
  10. Ten przykład pokazuje, 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 podać ten sam RecyclerView.Adapter , którego używasz do inicjowania RecyclerView na potrzeby SelectionTracker.Builder. Dlatego po utworzeniu instancjiSelectionTracker wstrzyknij ją do funkcjiRecyclerView.Adapter. W przeciwnym razie nie możesz sprawdzić stanu wybranego elementu za pomocą metody onBindViewHolder().

  11. uwzględnić wybór w zdarzeniach cyklu życia aktywności;
  12. Aby zachować stan wyboru w zdarzeniu cyklu życia aktywności, aplikacja musi wywołać metody onSaveInstanceState()onRestoreInstanceState() śledzącego wyboru z metod onSaveInstanceState()onRestoreInstanceState() aktywności. Aplikacja musi też podać unikalny identyfikator wyboru konstruktorowi SelectionTracker.Builder. Ten identyfikator jest wymagany, ponieważ aktywność lub fragment może mieć więcej niż jedną odrębną listę do wyboru, a wszystkie z nich muszą być zapisywane w zapisanym stanie.

Dodatkowe materiały

Więcej informacji znajdziesz w tych materiałach: