Dostosowywanie listy dynamicznej   Element Jetpacka na Androida.

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

Możesz dostosować RecyclerView obiektów 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 dostosowania.

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ć lub 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 wyszukiwaniom.findViewById() Biblioteka Android Support Library zawiera 3 standardowe menedżery układu, z których każdy oferuje wiele opcji dostosowywania:

  • LinearLayoutManager: uporządkuje elementy na jednowymiarowej liście. Użycie RecyclerView z LinearLayoutManager zapewnia funkcjonalność podobną do układu ListView.
  • GridLayoutManager: układa elementy w dwujęzycznej siatce, tak jak pola na szachownicy. Użycie właściwości RecyclerView z GridLayoutManager zapewnia takie funkcje jak układ GridView.
  • StaggeredGridLayoutManager: układa elementy w dwudwumiarowej siatce, przy czym każda kolumna jest nieco przesunięta względem 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.

Dodaj animacje 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 wygenerowania 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 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 regulującymi zachowanie podczas wyboru, na przykład 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. 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 umożliwia bibliotece wyboru informacje o elementach RecyclerView z określoną wartością MotionEvent. Jest to fabryka instancji ItemDetails, które są kopiami zapasowymi lub wyodrębnieniami instancji RecyclerView.ViewHolder.

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

    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, tak aby odzwierciedlał stan aktywacji. Zalecamy użycie zasobu listy stanów kolorów do skonfigurowania stylizacji.
  5. Użyj 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. Wykonaj dowolne zinterpretowane działania dodatkowe.
  8. Na końcu potoku przetwarzania zdarzeń biblioteka może stwierdzić, że użytkownik próbuje aktywować element przez jego kliknięcie lub próbuje przeciągnąć element lub zestaw wybranych elementów. Aby reagować na te interpretacje, zarejestruj odpowiedniego detektora. Więcej informacji znajdziesz tutaj: SelectionTracker.Builder.

  9. Zmontuj wszystko za pomocą narzędzia 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 RecyclerView.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ż dostarczać unikalny identyfikator wyboru do konstruktora 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: