Recyclerview onBindViewHolder вызывается для всех элементов внутри LinearLayout с весами
Я недавно обновился с библиотеки поддержки recyclerview-v7:23.1.1 до recyclerview-v7: 25.1.0.
My Layout содержит 2 повторных просмотра, разделенных на 50% на экране. XML-код выглядит следующим образом:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scrollbars="none"/>
<android.support.v4.widget.Space
android:layout_width="@dimen/two_dp"
android:layout_height="match_parent"
android:background="@color/dark_gray"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:scrollbars="none"/>
</LinearLayout>
Теперь onBindViewHolder вызывается для всех элементов списка, а не только для видимых элементов. Это начало происходить после обновления для поддержки библиотеки 25.1.0.
Работает нормально, если убраны веса, но требуется наличие двух recylcerviews бок о бок.
Как я могу сказать, что recyclerview перезаписывает представления вместо загрузки всех?
ОБНОВЛЕНИЕ: Он отлично работает на Зефир и выше устройств. Проблема присутствует в Lollipop или ниже. Вы можете найти демонстрационный проект здесь: https://bitbucket.org/aniketit/recyclerviewtest
3 ответа
Я столкнулся с той же проблемой, которая сохранилась после удаления взвешенных и 0dp элементов. В моем случае проблема была довольно тривиальной - я случайно поместил свой RecyclerView в NestedScrollView с fillViewPort = true. Это приводит к тому, что адаптер будет создавать все элементы для представления, и вы заметите существенную задержку реагирования.
Оказывается, проблема возникнет, если вы просто используете RecyclerView в простом старом ScrollView.
Я была такая же проблема. RecyclerView хорошо перерабатывал зефир, но не раньше.
Моя ошибка состояла в том, чтобы поместить мой RecyclerView в ScrollView. Вы должны проверить, есть ли у вас вид прокрутки, если да, удалите его, и ваша проблема будет решена для устройств до зефира.
С библиотеками> 23.1.1 вы можете удалить
андроид:layout_width="0dp"
удали его и все работает отлично.