如果在 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
Android:TextInputLayout 不适合页面并阻止页面在 NestedScrollView 内滚动
webview 高度在 nestedScrollView 内无限增长