首页 > 解决方案 > 执行 Fragment replace() 后恢复 RecyclerView 的滚动位置

问题描述

我有一个包含两个片段的简单活动:主要(包含项目列表)和详细信息。详细信息屏幕是一个片段,当单击主列表中的项目时显示该片段。DetailFragment正在使用 显示replace()

RecyclerView从详细信息屏幕导航回来后,我希望滚动位置与我留下的完全相同。

只要replace()启动onDestroyView()onCreateView()循环发生MainFragment,从 回来后DetailFragment滚动RecyclerView位置为 0(在顶部),因为这是一个全新RecyclerView的,与离开之前的那个没有任何联系DetailFragment

replace()ing 片段不会开始onSaveInstanceState()调用,这就是为什么使用此处概述的技术不适用的原因。

我想知道处理这个用例的正确方法是什么?

当然,我可以保存该位置,onDestroyView()然后手动滚动到该位置,但也许我错过了一些明显的解决方案?

建议使用add()而不是的答案replace()是不受欢迎的。

标签: androidandroid-recyclerviewandroid-viewandroid-scrollviewandroid-savedstate

解决方案


我已经RecyclerView宣布为NestedScrollView. 这就是问题所在。

当我摆脱NestedScrollView一切时,一切都会自动处理。


推荐阅读