Сохранение и восстановление позиции RecyclerView не работает

Я использую GridLayoutManager в качестве LayoutManager для RecyclerView внутри фрагмента, а адаптер RecyclerView заполняется загрузчиком. Я пытался сохранить и восстановить состояние GridLayoutManager при ротации устройства, но он не работал, и все еще возвращался в исходное состояние "первый элемент в RecyclerView".

Метод onSaveInstanceState:

    @Override
public void onSaveInstanceState(Bundle outState) {
    mRecylcerViewParecelable = mGridView.getLayoutManager().onSaveInstanceState();
    outState.putParcelable(GRID_LAYOUT_PARCEL_KEY, mRecylcerViewParecelable);
    super.onSaveInstanceState(outState);
}

Метод onViewStateRestored:

    @Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
    if(savedInstanceState!=null){
        mRecylcerViewParecelable = savedInstanceState.getParcelable(GRID_LAYOUT_PARCEL_KEY);
    }
    super.onViewStateRestored(savedInstanceState);
}

Метод onLoadFinished:

    @Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mMovieAdapter.swapCursor(data);
  mGridView.getLayoutManager().onRestoreInstanceState(mRecylcerViewParecelable);}

1 ответ

Попробуй завернуть onRestoreInstanceState() внутри обработчик:

new Handler().postDelayed(new Runnable() {
            @Override public void run() {
                mGridView.getLayoutManager().onRestoreInstanceState(listState);
            }
        }, 300);

Это взломать, чтобы задержать onRestoreInstanceState, У меня возникла та же проблема, IMO похоже, что RecyclerView продолжает возвращаться в исходное состояние, потому что данные в адаптере все еще заполняются, когда мы вызываем onRestoreInstanceState,

Другие вопросы по тегам