Позвольте мне начать с только немного фона (который вы уже понимаете, но это необходимо, чтобы объяснить onBindViewHolder()
).
RecyclerView
предназначен для отображения длинных списков (или сеток) предметов. Предположим, вы хотите отобразить 100 строк. Простым подходом было бы просто создать 100 просмотров, по одному для каждой строки и выложить все из них. Но это было бы расточительно, потому что большинство из них было бы выключено, потому что позволяет сказать, что только 10 из них подходят на экране.
Таким образом, RecyclerView
вместо этого создает только 10 видов, которые находятся на экране. Таким образом, вы получаете 10-кратную скорость и использование памяти. Но что происходит, когда вы начинаете прокрутку и вам нужно начинать показывать следующие виды?
Снова простой подход заключается в создании нового представления для каждой новой строки, которую необходимо показать. Но таким образом, когда вы достигнете конца списка, вы создадите 100 просмотров, а использование вашей памяти будет таким же, как и в первом подходе. И создание просмотров требует времени, поэтому ваша прокрутка, скорее всего, не будет гладкой.
Именно поэтому RecyclerView
использует тот факт, что при прокрутке и появлении новых строк на экране также исчезают старые строки. Вместо создания нового представления для каждой новой строки старое представление переработано и повторно используется путем привязки к нему новых данных.
Это происходит точно в onBindViewHolder()
. Первоначально вы получите новых неиспользованных держателей, и вы должны заполнить их данными, которые вы хотите отобразить. Но при прокрутке вы начнете получать держатели для просмотра, которые использовались для строк, которые выходили из экрана, и вы должны заменить старые данные, которые они хранят с новыми данными.
, пожалуйста, напишите свой код – Nisarg
проверьте эту надежду, это поможет вам https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html –
спасибо @PradeepGupta, но я все еще запутался, когда это называется. – Shubh