Dostosowywanie listy dynamicznej   Część Androida Jetpack.

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

Możesz dostosowaćRecyclerView obiekty do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie list dynamicznych za pomocą elementu RecyclerView zapewniają wszystkie funkcje, których potrzebuje większość programistów. W wielu przypadkach wystarczy zaprojektować widok dla każdego obiektu widoku i napisać kod, który będzie aktualizować te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma konkretne wymagania, możesz na kilka sposobów zmodyfikować standardowe działanie. W tym dokumencie opisujemy niektóre z możliwych dostosowań.

Modyfikowanie układu

RecyclerView używa menedżera układu do rozmieszczania 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 użyć widoku, menedżer układu może poprosić adapter o zastąpienie zawartości widoku innym elementem z zestawu danych. Ponowne wykorzystywanie widoków w ten sposób zwiększa wydajność, ponieważ pozwala uniknąć tworzenia niepotrzebnych widoków lub wykonywania kosztownych wyszukiwań.findViewById() Biblioteka pomocy Androida zawiera 3 standardowe menedżery układu, z których każdy oferuje wiele opcji dostosowywania:

  • LinearLayoutManager: rozmieszcza elementy na liście jednowymiarowej. Używanie RecyclerView z LinearLayoutManager zapewnia funkcjonalność podobną do układu ListView.
  • GridLayoutManager: rozmieszcza elementy w dwuwymiarowej siatce, podobnie jak pola na szachownicy. Użycie RecyclerViewGridLayoutManager zapewnia funkcjonalność podobną do układu GridView.
  • StaggeredGridLayoutManager: rozmieszcza elementy w dwuwymiarowej siatce, w której każda kolumna jest lekko przesunięta względem poprzedniej, podobnie jak gwiazdy na fladze Stanów Zjednoczonych.

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

Dodawanie animacji elementów

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

Włączanie wyboru 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 produktu. Możesz też zachować kontrolę nad zasadami określającymi zachowanie związane z wyborem, np. które elementy kwalifikują się do wyboru i ile elementów można wybrać.

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

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

    Do identyfikowania wybranych elementów możesz używać 3 głównych typów:

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

  2. Wdróż ItemDetailsLookup.
  3. ItemDetailsLookup umożliwia bibliotece wyboru dostęp do informacji o elementach RecyclerView na podstawie MotionEvent. Jest to w zasadzie fabryka instancji ItemDetails, które są tworzone na podstawie instancji RecyclerView.ViewHolder lub z niej pobierane.

  4. Zaktualizuj obiekty ViewRecyclerView, aby odzwierciedlić, czy użytkownik wybiera lub odznacza elementy.

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

    • onBindViewHolder() wywołaj setActivated()nie setSelected()–włącz obiekt Viewtrue lub false w zależności od tego, czy element jest wybrany.
    • Zaktualizuj styl widoku, aby odzwierciedlał stan aktywacji. Do skonfigurowania stylu zalecamy użycie zasobu listy stanów kolorów.
  5. Użyj ActionMode, aby udostępnić użytkownikowi narzędzia do wykonania działania na zaznaczeniu.
  6. Zarejestruj SelectionTracker.SelectionObserver, aby otrzymywać powiadomienia o zmianach wyboru. Gdy wybór zostanie utworzony po raz pierwszy, uruchom ActionMode, aby wyświetlić go użytkownikowi i udostępnić działania związane z wyborem. Możesz na przykład dodać przycisk usuwania do paska ActionMode i połączyć strzałkę wstecz na pasku z wyczyszczeniem wyboru. Gdy wybór będzie pusty (jeśli użytkownik ostatnim razem wyczyści wybór), zakończ tryb działania.

  7. wykonywać wszystkie zinterpretowane 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 odpowiedni detektor. Więcej informacji znajdziesz w sekcji SelectionTracker.Builder.

  9. Złóż wszystko za pomocą SelectionTracker.Builder.
  10. W tym przykładzie pokazujemy, 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 dostarczyć ten sam obiekt RecyclerView.Adapter, którego używasz do inicjowania obiektu RecyclerView w obiekcie SelectionTracker.Builder. Dlatego po utworzeniu instancji SelectionTracker wstrzyknij ją do instancji RecyclerView.Adapter. W przeciwnym razie nie możesz sprawdzić wybranego stanu produktu za pomocą metody onBindViewHolder().

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

Dodatkowe materiały

Więcej informacji znajdziesz w tych materiałach.