我有一个简单的活动,有两个片段:main(包含项目列表)和detail。详细信息屏幕是一个片段,当在主列表中单击某个项目时会显示该片段。正在使用replace()
显示DetailFragment
。
从详细信息屏幕导航后,我希望在RecyclerView
中具有与原来相同的滚动位置。
只要replace()
发起onDestroyView()
和onCreateView()
的周期以发生MainFragment
,从DetailFragment
返回之后,RecyclerView
就会有一个滚动位置0(在顶部),因为这是一个全新的RecyclerView
,与离开DetailFragment
之前的那个位置没有任何联系。
replace()
片段不会不发起onSaveInstanceState()
的调用,这就是使用here概述的技术不适用的原因。
我想知道处理此用例的正确方法是什么?
我当然可以将位置保存在onDestroyView()
上,然后手动滚动到该位置,但是也许我缺少一些明显的解决方案?
不欢迎提出使用add()
而不是replace()
的答案。
答案 0 :(得分:0)
由于无法使用onSaveInstanceState()
,请尝试使用ViewModel
保存所需的数据。
当您声明适配器并将其设置为第一个recyclerview时,请尝试通过适配器实例回调到actvity,在活动中,您可以尝试将adapter instance or any required data
保存在ViewModel
中您的活动。
一旦您从详细信息片段中回来,就可以从活动的ViewModel中获取reycycler数据的保存实例。
答案 1 :(得分:0)
我已将RecyclerView
声明为NestedScrollView
的子代。这就是问题所在。
当我摆脱NestedScrollView
后,一切都会自动处理。