当使用权重在LinearLayout内部时,Recyclerview onBindViewHolder调用所有项目

时间:2017-01-05 15:36:35

标签: android android-recyclerview android-support-library

我最近从支持库recyclerview-v7:23.1.1更新到recyclerview-v7:25.1.0。

我的布局包含2个在屏幕上分割50%的recylerviews。 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个recylcerview。

如何告知recyclerview回收视图而不是全部加载?

更新:它适用于Marshmallow及以上设备。该问题出现在棒棒糖或以下。 您可以在此处找到演示项目: https://bitbucket.org/aniketit/recyclerviewtest

3 个答案:

答案 0 :(得分:9)

我遇到了在删除加权和0dp元素后仍然存在的相同问题。在我的情况下,问题相当简单 - 我无意中将我的RecyclerView放在NestedScrollView中,并且fillViewPort = true。这会导致适配器将构建视图的所有元素,您会发现响应性显着延迟。

如果您只在普通的旧ScrollView中使用RecyclerView,则会出现问题。

答案 1 :(得分:3)

我有同样的问题。 RecyclerView在棉花糖中回收良好,但之前没有。

我的错误是将我的RecyclerView放入ScrollView。 您应该检查是否有滚动视图,如果是,则将其删除,您的问题将在棉花糖前设备上解决。

答案 2 :(得分:2)

使用库&gt;比 23.1.1 你可以删除

  

机器人:layout_width = “0dp”

删除它,一切正常。