Когда вызывается onBindViewHolder и как он работает?

Я начинаю, и у меня возникают проблемы с пониманием части кода. Может кто-нибудь, пожалуйста, объясните мне, когда эта функция вызывается и для чего она предназначена?

Вот мой код:

    public void onBindViewHolder(myViewHolder holder, int position) {

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

Ответы

Ответ 1

Позвольте мне начать с немного фона (который вы уже можете понять, но нужно объяснить onBindViewHolder()).

RecyclerView предназначен для отображения длинных списков (или решеток) элементов. Предположим, вы хотите отобразить 100 строк. Простым подходом было бы просто создать 100 просмотров, по одному для каждой строки и выложить все из них. Но это было бы расточительно, потому что большинство из них было бы отключено от экрана, потому что позволяет говорить, что только 10 из них подходят на экране.

Итак, RecyclerView вместо этого создает только 10 представлений, которые находятся на экране. Таким образом, вы получаете 10-кратную скорость и использование памяти. Но что происходит, когда вы начинаете прокрутку и вам нужно начинать показывать следующие виды?

Снова простой подход состоял бы в создании нового представления для каждой новой строки, которую нужно показать. Но таким образом, когда вы достигнете конца списка, вы создадите 100 просмотров, а использование вашей памяти будет таким же, как и в первом подходе. И создание просмотров требует времени, поэтому ваша прокрутка, скорее всего, не будет гладкой.

Вот почему RecyclerView использует тот факт, что при прокрутке и появлении новых строк на экране также исчезают старые строки. Вместо создания нового представления для каждой новой строки старое представление переработано и повторно используется путем привязки к нему новых данных.

Это происходит именно в onBindViewHolder(). Первоначально вы получите новых неиспользованных держателей, и вы должны заполнить их данными, которые вы хотите отобразить. Но при прокрутке вы начнете получать держатели для просмотра, которые использовались для строк, которые выходили из экрана, и вам нужно заменить старые данные, которые они хранят с новыми данными.

Ответ 2

Он вызывается RecyclerView для отображения данных в указанной позиции. Этот метод должен обновлять содержимое элемента itemView, чтобы отразить элемент в данной позиции.

для дополнительной информации RecyclerView.Adapter#onBindViewHolder