Recyclerview Scroll State сохраняет с помощью Room и LiveData на ViewPager - PullRequest
0 голосов
/ 24 мая 2019

Я использую шаблон MVVM с Комната База данных.На одном из экранов есть 3 вкладки с FragmentPagerAdapter viewPager.Теперь я могу сохранить и восстановить из базы данных в моих фрагментах.Но я также хочу сохранить состояние прокрутки Recycler Views , которые находятся во всех трех вкладках.

Итак, каждый фрагмент будет использовать свой метод для получения LiveData из Dao.Таким образом, каждый запрос отслеживается только одним фрагментом.Теперь 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...