我正在通过 Room 数据库使用MVVM模式。在一个屏幕中,有3个带有 FragmentPagerAdapter viewPager的选项卡。现在,我可以在“片段”中保存并从数据库检索。但我也想保存所有三个选项卡中的“回收站视图”的滚动状态。
因此,每个片段都将使用不同的方法从Dao获取LiveData。因此,每个查询仅由1个片段进行观察。现在,ViewPager默认具有默认值viewPager.setOffscreenPageLimit(); is 1
。现在,我想保存每个片段的滚动状态,即使在暂停并返回后也是如此。
下面是片段观察Livedata的代码,该代码在所有选项卡中都很常见:
mViewModel.getLiveFlights().observe(getViewLifecycleOwner(), flightGroups -> adapter.submitList(flightGroups));
我尝试保存LinearLayoutManager状态并稍后通过以下代码进行检索:
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
Log.e(TAG,"onViewStateRestored");
if(savedInstanceState != null)
{
Parcelable savedRecyclerLayoutState = savedInstanceState.getParcelable(BUNDLE_RECYCLER_LAYOUT);
if(savedRecyclerLayoutState != null && recyclerView.getLayoutManager() != null)
recyclerView.getLayoutManager().onRestoreInstanceState(savedRecyclerLayoutState);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.e(TAG,"onSaveInstanceState");
if(recyclerView.getLayoutManager() != null)
outState.putParcelable(BUNDLE_RECYCLER_LAYOUT, recyclerView.getLayoutManager().onSaveInstanceState());
}
获得了上面的代码