2016-05-30 12 views
19

Jestem początkujący i mam problem ze zrozumieniem fragmentu kodu. Czy ktoś może mi wyjaśnić, kiedy ta funkcja się pojawia i do czego służy?Po wywołaniu metody onBindViewHolder i jak to działa?

Oto mój kod:

public void onBindViewHolder(myViewHolder holder, int position) { 

     RecViewHolder currentdata = data.get(position); 
     holder.favChecker = currentdata.getFavChecker(); 
     holder.serialID = currentdata.getSerialID(); 
     holder.theClassName = currentdata.getTheClassName(); 
} 
+0

proszę zaksięgować swój kod – Nisarg

+1

sprawdź tę nadzieję, że to pomoże Ci https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html –

+0

dzięki @PradeepGupta, ale nadal jestem zdezorientowany, gdy to się nazywa. – Shubh

Odpowiedz

64

Zacznę tylko trochę tle (który można już zrozumieć, ale jest to potrzebne do wyjaśnienia onBindViewHolder()).

RecyclerView służy do wyświetlania długich list (lub siatek) przedmiotów. Powiedzmy, że chcesz wyświetlić 100 wierszy czegoś. Prostym podejściem byłoby stworzenie 100 widoków, po jednym dla każdego rzędu i położyć wszystkie. Byłoby to jednak marnotrawstwem, ponieważ większość z nich byłaby poza ekranem, ponieważ powiedzmy, że tylko 10 z nich mieści się na ekranie.

Tak więc RecyclerView zamiast tego tworzy tylko 10 widoków na ekranie. W ten sposób uzyskujesz 10 razy lepszą prędkość i zużycie pamięci. Ale co się stanie, gdy zaczniesz przewijać i musisz zacząć wyświetlać kolejne widoki?

Ponownie proste podejście polegałoby na utworzeniu nowego widoku dla każdego nowego wiersza, który należy wyświetlić. Ale w ten sposób, zanim dojdziesz do końca listy, utworzysz 100 widoków, a użycie pamięci będzie takie samo, jak w pierwszym podejściu. Tworzenie widoków wymaga czasu, więc przewijanie najprawdopodobniej nie byłoby płynne.

To dlatego RecyclerView wykorzystuje fakt, że podczas przewijania i nowych wierszy pojawiają się na ekranie również stare wiersze znikają z ekranu. Zamiast tworzenia nowego widoku dla każdego nowego wiersza, stary widok jest ponownie przetwarzany i ponownie wykorzystywany przez powiązanie z nim nowych danych.

Dzieje się to dokładnie w onBindViewHolder(). Początkowo otrzymasz nowe, nieużywane posiadacze widoku i będziesz musiał wypełnić je danymi, które chcesz wyświetlić. Ale podczas przewijania zaczniesz dostawać widoki, które były używane dla wierszy, które zniknęły z ekranu i musisz zastąpić stare dane, które zawierały, nowymi danymi.

+0

Dzięki @Marcin to było świetne wyjaśnienie. – Shubh

+0

Wielkie i proste wyjaśnienie, dzięki –

+1

z aktualizacji w SDK teraz mam inne zachowanie, tj. OnBindViewHolder jest kontrowersyjne wywoływanie. – Abhishek

1

Nazywana przez RecyclerView do wyświetlania danych w określonym położeniu. Ta metoda powinna zaktualizować zawartość itemView, aby odzwierciedlić pozycję na danej pozycji.

uzyskać więcej informacji sprawdź RecyclerView.Adapter#onBindViewHolder

Powiązane problemy