当使用权重线性布局时,Recyclerview的onBindViewHolder方法会为所有项调用。

19

我最近将支持库recyclerview-v7:23.1.1更新为recyclerview-v7:25.1.0。

我的布局包含2个RecyclerView,屏幕上分为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 会为所有列表项调用,而不仅仅是可见项。 这是在更新到 support library 25.1.0 后开始出现的。

如果去掉权重,则可以正常工作,但需要并排放置两个recylcerviews。

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

更新:它在Marshmallow及以上设备上运行良好。该问题存在于Lollipop或更早版本中。 您可以在此处找到演示项目: https://bitbucket.org/aniketit/recyclerviewtest


1
请发布相关的onBindViewHolder代码。 - Bradley Wilson
@BradleyWilson,无论其内部代码如何,都会调用onBindViewHolder。我尝试使用一个空的onBindViewHolder函数。 - Aniket Shinde
1
@BradleyWilson 我已经更新了问题,并附上了演示项目。 - Aniket Shinde
太棒了,我会帮你看看的伙计。 - Bradley Wilson
1
我在所有版本中遇到了这个问题,在嵌套滚动视图中。 - GvSharma
显示剩余5条评论
3个回答

13

我遇到了相同的问题,即使删除了加权和0dp元素,问题仍然存在。在我的情况下,问题相当微不足道——我不小心将RecyclerView放在了fillViewPort=true的NestedScrollView中。这会导致Adapter为视图构建所有元素,并且你会注意到响应速度显著延迟。

结果发现,如果你只是把RecyclerView放在一个普通的ScrollView中,问题也会出现。


1
你好,你能找到任何解决方案吗?当使用fillViewPort为false的NestedScrollableView时,我也遇到了同样的问题。 - GiridharaSPK

3

我有同样的问题。在Marshmallow中,RecyclerView回收得很好,但在之前不行。

我的错误是将RecyclerView放置在ScrollView中。你应该检查是否有滚动视图,如果有,请将其删除,这样就可以为预先设置的棉花糖设备解决问题了。


2

使用版本大于23.1.1的库,您可以删除

android:layout_width="0dp"

删除它,一切都可以完美地工作。


1
这对我解决了问题!我将我的两个权重布局的layout_width都设置为"match_parent",而不是0dp,现在它可以正常工作了。 - Stephen Ruda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接