@fuset

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

Всем привет есть вот такая разметка
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true">
    <com.baoyz.widget.PullRefreshLayout
        android:layout_width="match_parent" 
        android:layout_height="match_parent">
    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
             android:id="@+id/fragment_main_controller"
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="match_parent"/>
    </ScrollView>
    </com.baoyz.widget.PullRefreshLayout> 
</LinearLayout>

Я создаю свою 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 и так далее*/
   }

В чем может быть проблема?
То есть я понял так, что когда я обновляю адаптер для новых элементов они почему то прорисовываются поэтому если скрол находится не в самом низу он начинает виснуть так как добавляются элементы
  • Вопрос задан
  • 1048 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Android
Android developer at Yandex
Отсюда не видно, в чём проблема. Как минимум для начала избавьтесь от странных вещей (типа динамического создания ресайклера, зачем это вам понадобилось? и кучи каких-то контейнеров).
Ну и в такой ситуации правильно вызывать adapter.notifyItemRangeInserted();
Вы точно парсите это всё не на мейнтреде, и от этого тормозит?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы