2017-01-05 3 views
10

Недавно я обновил из библиотеки поддержки recyclerview-v7: 23.1.1 to recyclerview-v7: 25.1.0.Recyclerview onBindViewHolder для всех элементов, когда внутри LinearLayout с весами

My Layout содержит 2 recylerviews, разделенных на 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.

Он работает нормально, если грузы удалены, но требуется 2 повторных просмотра рядом.

Как указать recyclerview для повторного использования представлений вместо загрузки всех?

ОБНОВЛЕНИЕ: Он отлично работает на Зефир и выше устройств. Проблема присутствует в Lollipop или ниже. Демо-проект здесь:https://bitbucket.org/aniketit/recyclerviewtest

+1

опубликовать соответствующий код onBindViewHolder –

+0

@BradleyWilson onBindViewHolder вызывается независимо от кода внутри него. Я попытался с пустой функцией onBindViewHolder. –

+0

ладно, это странно. Я не могу сильно помочь с помощью только xml для вашего RecyclerViews, можете ли вы опубликовать любой код, который, по вашему мнению, является релевантным или может вызвать проблему (макеты строк строк и т. Д.) –

ответ

4

Я столкнулся с тем же вопросом, который сохранялся после удаления взвешенных и 0dp элементов. В моем случае проблема была довольно тривиальной - я случайно поместил свой RecyclerView внутри NestedScrollView с fillViewPort = true. Это приводит к тому, что адаптер будет создавать все элементы для представления, и вы заметите значительную задержку в реагировании.

Оказывается, проблема будет возникать, если вы просто используете RecyclerView в обычном старом ScrollView.

2

У меня была та же проблема. RecyclerView был хорошо утилизирован в Marshmallow, но не раньше.

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

1

С библиотеками> чем 23.1.1 вы можете удалить

андроида: layout_width = "0dp"

удалить его и все работает отлично.

+1

Это решило проблему для меня!Я установил layout_width = "match_parent" для обоих моих взвешенных макетов вместо 0dp, и теперь он работает правильно. –

Смежные вопросы