Dostosuj listę dynamiczną Zawiera Android Jetpack.
Możesz dostosować RecyclerView
obiektów do swoich potrzeb. Standardowe klasy opisane w artykule Tworzenie list dynamicznych za pomocą RecyclerView zapewniają wszystkie funkcje, których większość deweloperów potrzebuje. W wielu przypadkach wystarczy tylko zaprojektować widok dla każdego właściciela widoku i napisać kod, aby zaktualizować te widoki odpowiednimi danymi. Jeśli jednak Twoja aplikacja ma konkretne wymagania, możesz zmienić 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 pozycjonowania poszczególnych elementów na ekranie i określania, kiedy ponownie wykorzystać widoki elementów, które nie są już widoczne dla użytkownika. Aby ponownie wykorzystać widok, czyli recykling, menedżer układu może poprosić adaptera o zastąpienie zawartości widoku innym elementem ze zbioru danych. Ten sposób poprawia wydajność dzięki uniknięciu tworzenia zbędnych widoków i wykonywania kosztownych wyszukiwańfindViewById()
. Biblioteka pomocy Androida zawiera trzy menedżery układu standardowego,
z których każdy ma wiele opcji dostosowania:
LinearLayoutManager
: uporządkuje elementy na jednowymiarowej liście. UżycieRecyclerView
zLinearLayoutManager
zapewnia funkcje takie jak układListView
.GridLayoutManager
: uporządkuje elementy w dwuwymiarowej siatce, tak jak kwadraty na szachownicy. Użycie właściwościRecyclerView
zGridLayoutManager
zapewnia takie funkcje jak układGridView
.StaggeredGridLayoutManager
: uporządkuje elementy w dwuwymiarowej siatce, a każda kolumna jest nieco odsunięta od poprzedniej, tak jak gwiazdki na amerykańskiej flagie.
Jeśli te menedżery układu nie odpowiadają Twoim potrzebom, możesz utworzyć własny, rozszerzając klasę abstrakcyjną RecyclerView.LayoutManager
.
Dodaj animacje elementów
Za każdym razem, gdy element się zmienia, RecyclerView
korzysta z animatora, aby zmienić jego wygląd. Animator to obiekt, który rozszerza abstrakcyjną klasę RecyclerView.ItemAnimator
. Domyślnie RecyclerView
używa DefaultItemAnimator
do wygenerowania animacji. Jeśli chcesz użyć niestandardowych animacji, możesz zdefiniować własny obiekt animatora, rozszerzając RecyclerView.ItemAnimator
.
Włącz wybieranie elementów z listy
Biblioteka recyclerview-selection
umożliwia użytkownikom wybieranie elementów z listy RecyclerView
za pomocą dotyku lub myszy. Dzięki temu masz kontrolę nad wizualną prezentacją wybranego elementu. Możesz też zachować kontrolę nad zasadami kontrolującymi sposób wyboru, np. nad tym, które elementy można wybrać i ile elementów 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ć, a następnie utwórz
ItemKeyProvider
.Istnieją 3 typy kluczowych, których można użyć do identyfikacji wybranych elementów:
Parcelable
i jej 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 zaznacza czy odznacza.Biblioteka wyboru nie zapewnia domyślnej dekoracji wizualnej wybranych elementów. Podaj go podczas wdrażania
onBindViewHolder()
. Zalecamy następujące podejście:- W
onBindViewHolder()
wywołajsetActivated()
, a niesetSelected()
, do obiektuView
z poleceniemtrue
lubfalse
w zależności od tego, czy ten element jest wybrany. - Zaktualizuj styl widoku, tak aby odzwierciedlał stan aktywacji. Do konfigurowania stylu zalecamy użycie zasobu z listą stanów kolorów.
- W
- Użyj
ActionMode
, aby udostępnić użytkownikowi narzędzia do wykonania wybranego działania. - Wykonanie wszelkich zinterpretowanych działań dodatkowych.
- Zmontuj wszystko za pomocą narzędzia
SelectionTracker.Builder
. - Uwzględnij wybór w zdarzeniach cyklu życia działania.
ItemDetailsLookup
umożliwia bibliotece wyboru informacje o elementach RecyclerView
z określoną wartością MotionEvent
.
W praktyce jest to fabryka instancji ItemDetails
z kopią zapasową instancji RecyclerView.ViewHolder
lub z niej wyodrębnianych.
Zarejestruj SelectionTracker.SelectionObserver
, aby otrzymywać powiadomienia, gdy wybór się zmieni. Po utworzeniu wyboru uruchom polecenie ActionMode
, aby zaprezentować je użytkownikowi i wykonać związane z nim działania. Możesz na przykład dodać przycisk usuwania do paska ActionMode
i połączyć na nim strzałkę wstecz, aby wyczyścić wybór. Gdy wybór stanie się pusty (jeśli użytkownik anuluje go ostatnio), zakończ tryb działania.
Na końcu potoku przetwarzania zdarzeń biblioteka może określić, że użytkownik próbuje aktywować element, klikając go lub próbuje przeciągnąć element lub zestaw wybranych elementów. Aby reagować na te interpretacje, zarejestruj odpowiedniego detektora. Więcej informacji: 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 dostarczać ten sam obiekt RecyclerView.Adapter
, którego używasz do zainicjowania instancji RecyclerView
w SelectionTracker.Builder
. Dlatego po utworzeniu instancji SelectionTracker
wstrzyknij ją do instancji RecyclerView.Adapter
. W przeciwnym razie nie można sprawdzić wybranego stanu elementu za pomocą metody onBindViewHolder()
.
Aby zachować stan wyboru we wszystkich zdarzeniach cyklu życia aktywności, aplikacja musi wywoływać metody onSaveInstanceState()
i onRestoreInstanceState()
modułu śledzenia wyboru z metod onSaveInstanceState()
i onRestoreInstanceState()
odpowiednio aktywności. Aplikacja musi też dostarczać unikalny identyfikator wyboru do konstruktora SelectionTracker.Builder
. Ten identyfikator jest wymagany, ponieważ aktywność lub fragment mogą mieć więcej niż 1 odrębną listę, którą można wybrać i która musi pozostać zapisana.
Dodatkowe materiały
Dodatkowe informacje znajdziesz w dalszej części tego artykułu.
- Aplikacja demonstracyjna Słonecznika, która używa
RecyclerView
. - Użyj RecyclerView, aby wyświetlić przewijaną listę.
- Android Kotlin Fundamentals: podstawy RecyclerView do ćwiczenia w Codelabs.