Навигация по сайту

Популярные статьи

Zoptymalizuj przewijanie zagnieżdżone w sobie RecyclerView - ziginsider - Android Notes

Uwaga oparta na artykule Ninad MG „Optymalizacja zagnieżdżonego RecyclerView” .

RecyclerView zapewnia płynne przewijanie listy, umieszczając elementy ekranu poza ekranem w tak zwanej puli. Ponadto, gdy pojawiają się nowe elementy, RecyclerView nie odtwarza ich, ale używa ViewHoldera z puli, napełniając je rzeczywistymi danymi. W ten sposób uzyskuje się ponowne wykorzystanie ViewHoldera i zwiększa się wydajność struktury.

NB: Aby uzyskać pełniejszy obraz problemu z wydajnością w RecyclerView, zobacz sekcję „Życie i śmierć ViewHoldera” w ta uwaga . + Sekcja „Bonus” w ta uwaga .

Czasami więc, aby utworzyć kilka układów, musimy zagnieździć jeden RecyclerView w innym. Rozważmy przypadek, gdy poziomy RecyclerView jest zagnieżdżony w pionie.

Podczas przewijania zagnieżdżonych list poziomych przewijanie będzie płynne, ale jeśli przewiniesz listę pionową, przewijanie może spowolnić. Wynika to z faktu, że każdy RecyclerView ma własną pulę ViewHolder. I za każdym razem, gdy przewijasz listę pionową, poziome będą odtwarzać swoje ViewHoldery.

Możemy skorygować tę sytuację, dzieląc jedną pulę ViewHolder wśród wszystkich RecyclerView.

Odbywa się to za pomocą funkcji RecyclerView.setRecycledViewPool (RecycledViewPool):

Teraz, gdy wszystkie zagnieżdżone RecyclerView mają jedną pulę ViewHolder, używają nawzajem swojego ViewHoldera, a przewijanie staje się płynniejsze.

Ale przewijanie można zoptymalizować jeszcze bardziej.

Po pierwsze, dla określonego typu widoku, możesz ustawić maksymalną liczbę ViewHolderów do przechowywania w puli:

Tak więc możemy poprawić (tj. Zwiększyć) maksymalne wartości liczby w puli tych ViewHolderów, które są większe na ekranie w dowolnym momencie, biorąc pod uwagę fakt, że domyślnie ta liczba wynosi pięć.

Po drugie, zaczynając od biblioteka wsparcia 25.1.0 z nami jest szansa określ wewnętrzny układ RecyclerView layoutManager, ile widoku musisz przygotować przed pojawieniem się na ekranie:

gdzie N jest liczbą widocznego widoku.

Tak więc, jeśli na ekranie wewnętrzne poziome listy pokazują co najmniej trzy i pół widoku, możemy to zapisać:

NB: Domyślnie jest to N = 2

Dzięki temu wewnętrzny RecyclerView może tworzyć swój widok na wczesnym etapie, co poprawia wydajność podczas przewijania zewnętrznej listy.