Dostosowywanie listy dynamicznej, części Androida Jetpack.

Wypróbuj metodę 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 dynamicznych list 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. Recykling widoków w ten sposób poprawia 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życie RecyclerViewLinearLayoutManager zapewnia funkcjonalność podobną do układu ListView.
  • GridLayoutManager: układa 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 animacji. Jeśli chcesz udostępnić animacje niestandardowe, możesz zdefiniować własny obiekt animatora, rozszerzając 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 elementu. Możesz też zachować kontrolę nad zasadami określającymi zachowanie związane z wyborem, np. które produkty kwalifikują się do wyboru i ile produktó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 potem 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. Wdrożenie 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 wyodrębniane.

  4. Aktualizuj obiekty ViewRecyclerView, aby odzwierciedlać, 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:

    • W onBindViewHolder() wywołaj setActivated()nie setSelected()—włącz obiekt View z true 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 podać ten sam parametr RecyclerView.Adapter, którego używasz do inicjowania parametru RecyclerView w parametrze SelectionTracker.Builder. Dlatego po utworzeniu instancji SelectionTracker wstrzyknij ją do instancji RecyclerView.Adapter. W przeciwnym razie nie możesz sprawdzić stanu wybranego produktu za pomocą metody onBindViewHolder().

  11. Uwzględnij wybór w zdarzeniach cyklu życia aktywności.
  12. Aby zachować stan wyboru w zdarzeniach cyklu życia działania, aplikacja musi wywoływać metody onSaveInstanceState()onRestoreInstanceState() trackera wyboru z metod onSaveInstanceState()onRestoreInstanceState() działania. Aplikacja musi też przekazywać 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ę, którą można wybrać. Wszystkie te listy muszą być zachowane w zapisanym stanie.

Dodatkowe materiały

Więcej informacji znajdziesz w tych materiałach.