在ViewPager上使用Room和LiveData保存Recyclerview滚动状态

时间:2019-05-24 07:50:00

标签: android android-fragments android-viewpager android-room android-livedata

我正在通过 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());
    } 

编辑:我使用https://stackoverflow.com/a/29166336

获得了上面的代码

0 个答案:

没有答案