在弹出Backstack后重新创建RecyclerView时,它应该记住它的位置吗?

时间:2018-06-20 08:47:52

标签: android android-fragments android-recyclerview

我有一个片段,我用一个新的片段替换了

该片段包含一个RecyclerView,其中包含大量项目。

当用户按下新片段上的“完成”按钮时,我将弹出堆栈,然后重新创建旧片段。

这将导致再次调用OnCreateView方法,并且一切正常。

我的问题是重新创建了其中的RecyclerView,重置了适配器,但它似乎自动移动到了它离开的位置(我认为只有在使用事务添加而不是事务替换时才会发生)

作为一个侧面说明,适配器仍然为可见项调用OnBindViewHolder和OnCreateViewHolder。

我的问题是,为什么会这样?由于整个片段都被重新创建了,它不应该重置到第一个位置吗?除了在加载新片段之前手动调用scrollToPosition(0)之外,还有另一种方法可以使该片段不记住任何内容并在返回时实际上完全重新创建吗?

2 个答案:

答案 0 :(得分:3)

LinearLayoutManager将滚动位置存储在onSaveInstanceState中。由于SavedState parcelable与视图ID一起存储,因此,只要从后退堆栈返回时该位置没有超出范围,就可以恢复滚动位置。

答案 1 :(得分:0)

当您删除或替换一个片段并将事务添加到后台堆栈时,被移除的片段将停止(不销毁)。如果用户导航返回以还原该片段,它将重新启动。如果您不将事务添加到后台堆栈,则在删除或替换该片段时会将其破坏。

http://sapandiwakar.in/replacing-fragments/

希望这会有所帮助!