Dostosowywanie listy dynamicznej Część stanowiąca część Androida Jetpack.
Możesz dostosować RecyclerView
obiekty do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie list dynamicznych za pomocą RecyclerView zapewniają wszystkie funkcje potrzebne większości deweloperów. W wielu przypadkach wystarczy tylko zaprojektować widok dla każdego z nich i napisać kod, by uzupełnić te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma określone wymagania, możesz na kilka sposobów zmodyfikować standardowe działanie.
W tym dokumencie opisano niektóre z możliwych opcji dostosowania.
Modyfikowanie układu
RecyclerView
używa menedżera układu do umieszczania 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 wykorzystać widok lub odzyskać go, menedżer układu może poprosić adapter o zastąpienie jego zawartości innym elementem ze zbioru danych. Recykling widoków danych w ten sposób poprawia wydajność, ponieważ pozwala uniknąć tworzenia zbędnych widoków i kosztowania findViewById()
wyszukiwania. Biblioteka pomocy Androida zawiera 3 standardowe menedżery układów,
z których każdy ma wiele opcji dostosowywania:
LinearLayoutManager
: porządkuje elementy na jednowymiarowej liście. UżywanieRecyclerView
z elementemLinearLayoutManager
zapewnia takie funkcje jak układListView
.GridLayoutManager
: rozmieszcza elementy w dwuwymiarowej siatce, takiej jak kwadraty na szachownicy. Używanie elementuRecyclerView
z elementemGridLayoutManager
zapewnia takie funkcje jak układGridView
.StaggeredGridLayoutManager
: elementy są układane w dwuwymiarową siatkę, a każda kolumna jest nieco odsunięta od poprzedniej, tak jak w przypadku gwiazd na flagi amerykańskiej.
Jeśli te menedżery układu nie odpowiadają Twoim potrzebom, możesz utworzyć własne, rozszerzając RecyclerView.LayoutManager
klasę abstrakcyjną.
Dodaj animacje elementu
Po każdej zmianie elementu RecyclerView
używa animatora, aby zmienić jego wygląd. Ten animator to obiekt rozszerzający klasę abstrakcyjną RecyclerView.ItemAnimator
. Domyślnie RecyclerView
do wyświetlania animacji używa właściwości DefaultItemAnimator
. Jeśli chcesz udostępnić animacje niestandardowe, możesz zdefiniować własny obiekt animatora, rozszerzając właściwość RecyclerView.ItemAnimator
.
Włącz wybieranie 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, które określają zachowania użytkowników, np. które elementy kwalifikują się do wyboru i ile z nich można wybrać.
Aby dodać obsługę wyboru do instancji RecyclerView
, wykonaj te czynności:
- Określ typ klucza wyboru, którego chcesz użyć, i utwórz
ItemKeyProvider
.Istnieją 3 rodzaje kluczy, których można używać do identyfikowania wybranych elementów:
Parcelable
i jego podklasy, takie jakUri
String
Long
Szczegółowe informacje o typach kluczy wyboru znajdziesz w sekcji
SelectionTracker.Builder
. - Wdróż
ItemDetailsLookup
. - Zaktualizuj obiekty
View
elementu wRecyclerView
, aby określić, czy użytkownik je wybrał czy odznaczył.Biblioteka wyboru nie zapewnia domyślnej wizualnej dekoracji wybranych elementów. Podaj je podczas implementacji interfejsu
onBindViewHolder()
. Zalecamy takie podejście:- W
onBindViewHolder()
wywołajsetActivated()
, a niesetSelected()
– na obiekcieView
ztrue
lubfalse
, w zależności od tego, czy ten element jest wybrany. - Zaktualizuj styl widoku, by odzwierciedlić stan aktywacji. Do skonfigurowania stylu zalecamy użycie zasobu listy stanów kolorów.
- W
- Użyj narzędzia
ActionMode
, aby udostępnić użytkownikowi narzędzia do wykonania działania związanego z zaznaczonymi elementami. - Wykonaj dowolne zinterpretowane działania dodatkowe.
- Złóż wszystko za pomocą usługi
SelectionTracker.Builder
. - Uwzględnij wybór w zdarzeniach cyklu życia aktywności.
ItemDetailsLookup
zapewnia bibliotece wyboru dostęp do informacji o RecyclerView
elementach, którym przyznano uprawnienie MotionEvent
.
Jest to fabryka instancji ItemDetails
, z których kopie zapasowe są tworzone w instancji RecyclerView.ViewHolder
lub z których zostały wyodrębnione.
Zarejestruj SelectionTracker.SelectionObserver
, aby otrzymywać powiadomienia o zmianie wyboru. Gdy utworzysz wybór, uruchom polecenie ActionMode
, aby przedstawić go użytkownikowi i określić działania związane z jego wyborem. Możesz na przykład dodać przycisk usuwania do paska ActionMode
i połączyć znajdującą się na nim strzałkę wstecz, aby wyczyścić zaznaczenie. Gdy wybór stanie się pusty (jeśli użytkownik zaznaczy je po raz ostatni), zakończ tryb działania.
Na koniec potoku przetwarzania zdarzeń biblioteka może określić, że użytkownik próbuje aktywować element, klikając go, lub przeciągając element bądź zbiór wybranych elementów. Reaguj na te interpretacje, rejestrując odpowiedniego słuchacza. Więcej informacji: SelectionTracker.Builder
.
Ten przykład pokazuje, jak złożyć te elementy w jedną całość:
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 można było utworzyć instancję SelectionTracker
, aplikacja musi dostarczyć ten sam parametr RecyclerView.Adapter
, którego używasz do zainicjowania RecyclerView
w SelectionTracker.Builder
. Z tego względu po utworzeniu instancji SelectionTracker
wstrzyknij ją w RecyclerView.Adapter
. W przeciwnym razie nie można sprawdzić stanu wybranego elementu za pomocą metody onBindViewHolder()
.
Aby zachować stan wyboru w przypadku wszystkich zdarzeń cyklu życia aktywności, aplikacja musi wywoływać metody onSaveInstanceState()
i onRestoreInstanceState()
modułu śledzenia wyboru odpowiednio z metod onSaveInstanceState()
i onRestoreInstanceState()
aktywności. Aplikacja musi też podawać 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ę z możliwością wyboru, która musi zostać zachowana w zapisanym stanie.
Dodatkowe materiały
Dodatkowe informacje znajdziesz poniżej.
- Aplikacja demonstracyjna Sunflower, która korzysta z
RecyclerView
. - Użyj RecyclerView, aby wyświetlić przewijaną listę.
- Ćwiczenie z programowania Android Kotlin Fundamentals: RecyclerView fundamentals.