Dostosowywanie listy dynamicznej Zawiera Android Jetpack.

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 w wielu przypadkach wystarczy tylko zaprojektować widok dla każdego uchwytu i napisać za pomocą którego uzupełnia on 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 oraz do 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 wyszukiwaniom. Biblioteka pomocy Androida zawiera trzech menedżerów układu standardowego. Każdy z nich ma wiele opcji dostosowywania:

  • LinearLayoutManager: sortuje elementy w liście jednowymiarowej. Za pomocą RecyclerView w: LinearLayoutManager zapewnia takich jak ListView układ.
  • GridLayoutManager: rozmieszcza elementy w dwuwymiarowej siatce, tak jak kwadraty na szachownicę. Użycie RecyclerViewGridLayoutManager zapewnia funkcjonalność podobną do układu GridView.
  • StaggeredGridLayoutManager: rozmieszcza elementy w dwuwymiarowej siatce, a każda kolumna jest lekko przesunięta niż poprzednie, jak gwiazdy na amerykańskiej flagie.

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 by utworzyć animację. Jeśli chcesz udostępnić animacje niestandardowe, możesz zdefiniować własny obiekt animatora, rozszerzając klasę RecyclerView.ItemAnimator.

Włączanie wyboru elementów listy

recyclerview-selection biblioteka pozwala użytkownikom wybierać elementy z listy RecyclerView dotykiem ani przy użyciu myszy. Zapewnia to kontrolę nad wizualną prezentacją wybrany element. Zachowasz też kontrolę nad zasadami kontrolującymi wybór. zachowanie, np. które elementy można wybrać i ile z nich wyboru.

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. Wdrażaj ItemDetailsLookup
  3. Aplikacja ItemDetailsLookup zezwala na dostęp do biblioteki wyboru informacje o RecyclerView elementach dla MotionEvent Jest to fabryka instancji ItemDetails, które są kopiami zapasowymi lub wyodrębnieniami instancji RecyclerView.ViewHolder.

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

    Biblioteka wyboru nie zapewnia domyślnej ozdoby wizualnej dla wybrane elementy. Podaj te informacje podczas implementacji.onBindViewHolder() Zalecamy następujące podejście:

  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 zacznie wyświetlać użytkownikowi ten wybór i podać mu działania związane 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 określić użytkownik próbuje aktywować element, klikając go; próba przeciągania elementu lub zestawu wybranych elementów. Reaguj na te interpretacje, rejestrując odpowiednich słuchaczy. Więcej Więcej informacji zawiera 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 podać ten sam RecyclerView.Adapter , którego używa do inicjowania RecyclerView na potrzeby SelectionTracker.Builder. Dlatego po utworzeniu instancjiSelectionTracker wstrzyknij ją do funkcjiRecyclerView.Adapter. W przeciwnym razie nie możesz sprawdzić wybrano stan z metody onBindViewHolder().

  11. Uwzględnij wybór w wydarzeniach 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 również zapewniać unikalny identyfikator wyboru w funkcji 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: