如果在 nestedScrollView 内,RecyclerView 不回收

Posted

技术标签:

【中文标题】如果在 nestedScrollView 内,RecyclerView 不回收【英文标题】:RecyclerView not recycling if inside nestedScrollView 【发布时间】:2016-08-27 13:48:12 【问题描述】:

我的目标是拥有一个带有多个包含 RecyclerViews 的子 CardViews 的 NestedScrollView。

我当前的 xml 看起来像这样:

    <CardView>
        <RecyclerView/>
    </CardView>

    <CardView>
        <RecyclerView/>
    </CardView>
</NestedScrollView>

如果我在 RecyclerViews 上将 nestedScrollViewEnabled 设置为 false,一切似乎都按预期工作。但是,recyclerviews 中的行没有被回收。调用layoutManager.findFirstVisibleItemPosition() 总是返回0,而layoutManager.findLastVisibleItemPosition() 总是返回列表中最后一项的位置。

有什么建议吗?

【问题讨论】:

“没有被回收” - 不明白 好像列表总共有30行,那么30行就膨胀了。它应该增加屏幕上可见的行数。在我的情况下,应该只充气 6 行,并在滚动时“回收”;如果我删除nestedScrollView 就是这种情况 这个问题的运气好吗?? 当回收器视图位于另一个可滚动布局中时,它不会按设计回收视图(这很可能是设计的限制,因为 recyclerView 不再位于滚动控制,并且 ScrollView 或 NestedScrollView 不会与 RV 对话以告知其滚动/可见性情况。然后 RV 采用这种行为。我通常建议人们避免在 ScrollViews 中使用 RV,除非它们非常小房车。 【参考方案1】:

根据您的解释,似乎所有视图都在屏幕外渲染,这就是您获得回收站最后一个项目位置的原因。尝试设置

recyclerview.recycledViewPool.setMaxRecycledViews(int viewType, int max)

将最大值设置为 7 到 10 或更多

我希望这行得通

【讨论】:

以上是关于如果在 nestedScrollView 内,RecyclerView 不回收的主要内容,如果未能解决你的问题,请参考以下文章

在 NestedScrollView 内带有锚点的 Webview

检查 NestedScrollView 是不是可滚动

Android:TextInputLayout 不适合页面并阻止页面在 NestedScrollView 内滚动

webview 高度在 nestedScrollView 内无限增长

NestedScrollView 没有在 AlertDialog 内扩展高度

无法使用回收视图在 ScrollVIew/NestedScrollView 内滚动 ViewPager