如何在同一活动中的2个片段之间保存和恢复recyclerview的位置?
问题描述:
我已经实现了一些由单个Activity托管的片段(它们在同一个活动中)。在其中一个片段中(比如片段A),我有一个垂直回收站视图。如何在同一活动中的2个片段之间保存和恢复recyclerview的位置?
当我想从片段A导航到其他片段时(出现在同一个活动中),问题就出现了。假设我点击了列表的中间成员,然后导航到下一个片段。当我想回到第一个片段(片段A)时,它首先膨胀了列表。似乎它失去了它的位置,但是,使用onSaveInstanceState()
和onCreateView()
,我尝试在每次退出或输入片段时存储和恢复所选项目的位置。
我认为这个问题可能源于片段的生命周期,它们都在一个单独的活动中。作为this answer,提及:
在片段中,它们的所有生命周期回调都直接与其父Activity相关联。因此onSaveInstanceState在其父Activity被onSaveInstanceState调用时在Fragment上被调用。
这就是为什么我强调“单一”活动。我们如何处理这种情况?
我已经调试了我的程序,并且onSaveInstanceState
和onCreateView
甚至在它们应该被调用时都没有调用。下面是我尝试代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
selectedItem = savedInstanceState.getInt(BUNDLE_KEY_SELECTED_ITEM);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (savedInstanceState != null){
selectedItem = savedInstanceState.getInt(BUNDLE_KEY_SELECTED_ITEM);
}
myRecyclerView = (RecyclerView) v.findViewById(R.id.rv_mine);
// mData is a an ArrayList
myAdapter = new MyAdapter(mData, getContext(), this.selectedItem);
myLayoutManager = new LinearLayoutManager(getActivity());
myRecyclerView.setLayoutManager(myLayoutManager);
myRecyclerView.setAdapter(myAdapter);
return v;
}
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putInt(BUNDLE_KEY_SELECTED_ITEM,selectedItem);
super.onSaveInstanceState(outState);
}
您如何将碎片添加到您的运营商活动?你能分享这段代码片段吗? – Sanoop