Dostosowywanie listy dynamicznej Zawiera Android Jetpack.
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 jakListView
układ.GridLayoutManager
: rozmieszcza elementy w dwuwymiarowej siatce, tak jak kwadraty na szachownicę. UżycieRecyclerView
zGridLayoutManager
zapewnia funkcjonalność podobną do układuGridView
.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:
- 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:
Parcelable
oraz jego podklasy, takie jak:Uri
String
Long
Szczegółowe informacje o typach kluczy wyboru znajdziesz w sekcji
SelectionTracker.Builder
- Wdrażaj
ItemDetailsLookup
- Zaktualizuj obiekty
View
wRecyclerView
, 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:- W aplikacji
onBindViewHolder()
zadzwońsetActivated()
– niesetSelected()
– wł. obiektView
ztrue
lubfalse
w zależności od tego, czy zaznaczono. - Zaktualizuj styl widoku, aby odzwierciedlał stan aktywacji. Śr zalecamy użycie stan koloru wyświetlić listę zasobów, aby skonfigurować styl.
- W aplikacji
- Użyj elementu
ActionMode
, aby udostępnić użytkownikowi narzędzia do wykonania działania na zaznaczonym elemencie. - wykonywać interpretowane działania dodatkowe.
- Zmontuj wszystko za pomocą narzędzia
SelectionTracker.Builder
. - Uwzględnij wybór w wydarzeniach cyklu życia aktywności.
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
.
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.
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
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()
.
Aby zachować stan wyboru w zdarzeniu cyklu życia aktywności, aplikacja musi wywołać metody onSaveInstanceState()
i onRestoreInstanceState()
śledzącego wyboru z metod onSaveInstanceState()
i 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:
- Słonecznik
aplikacja w wersji demonstracyjnej, która używa
RecyclerView
. - Używanie RecyclerView do wyświetlania listy przewijanej – Codelab.
- Androida Kotlin Fundamentals: Podstawy RecyclerView do ćwiczenia w Codelabs.