Когда я добавляю данные в адаптер для RecyclerView скрол виснет на 1 секунду, как решить? Всем привет есть вот такая разметка





Я создаю свою View и кидаю ее в fragment_main_controller потом еще создаю LinearLayout(container_recycler_view) присоединяю ее к fragment_main_controller и динамически создаю адаптер и RecyclerView и через addView добавляю это все в container_recycler_view
Когда я подгружаю из сети данные и начинаю их вставлять (кроме первого раза так, так как все пока что пусто), все это начинает виснуть на секунду (когда обновляю адаптер),
виснуть начинает именно скролл
Добавляю новые элементы и обновляю адаптер вот так:int v = adapter.getMyModels().size() - 1;
adapter.getMyModels().addAll(myModelPages.getMyModels());
adapter.notifyItemRangeChanged(v, adapter.getMyModels().size() - v);
(пробовал и notifydatasetchanged такой же результат)
Вот код самого адаптера:public static class ViewHolderMyModel extends RecyclerView.ViewHolder {
public ItemMyModelWidget itemMyModelWidget;
public ViewHolderQuestion(ItemMyModelWidget v) {
super(v);
itemMyModelWidget = v;
}
}
@Override
public Adapter.ViewHolderMyModel onCreateViewHolder(ViewGroup parent, int viewType) {
ItemMyModelWidget itemMyModelWidget = new ItemMyModelWidget(parent.getContext());
ViewHolderMyModel viewHolder = new ViewHolderMyModel(itemMyModelWidget);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
final ViewHolderMyModel viewHolderMyModel = (ViewHolderMyModel) holder;
final MyModel model = myModels.get(position);
/* Вставляю текст в itemMyModelWidget и так далее*/
}
В чем может быть проблема?
То есть я понял так, что когда я обновляю адаптер для новых элементов они почему то прорисовываются поэтому если скрол находится не в самом низу он начинает виснуть так как добавляются элементы

21 Авг 2019 в 06:24
179 +1
0
Ответы
1

Проблема может быть связана с тем, что при обновлении адаптера происходит перерисовка всех элементов RecyclerView, включая уже видимые на экране. Если в этот момент в RecyclerView находится большое количество элементов, то операция обновления может занять некоторое время и вызвать "притормаживание" скролла.

Один из способов решения этой проблемы - использовать методы notifyItemInserted(), notifyItemRangeInserted() и другие методы уведомления адаптера, которые позволяют добавить элементы без необходимости полной перерисовки. Вы можете вызывать эти методы после добавления новых элементов в список, чтобы адаптер обновлял только необходимые элементы, а не все.

Пример кода для добавления элементов в RecyclerView с использованием метода notifyItemInserted():

int startPosition = adapter.getMyModels().size();
adapter.getMyModels().addAll(myModelPages.getMyModels());
adapter.notifyItemRangeInserted(startPosition, myModelPages.getMyModels().size());

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

20 Апр в 13:19
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир