Android: RecyclerView GridLayoutManager - Восстановление позиции прокрутки не работает должным образом

У меня есть 3 вида деятельности: A -> B -> C

В упражнении B я заполняю с помощью GridlayoutManager из RecyclerView. Я хочу сохранить состояние прокрутки при переходе к действию C и восстановить состояние прокрутки при возвращении к действию B из действия C.

private RecyclerView mImgList;
private GridLayoutManager mRecyclerGridMan;
private final String KEY_RECYCLER_STATE = "recycler_state";
private Parcelable mListState = null;
private static Bundle mBundleRecyclerViewState;

,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

,

@Override
protected void onPause()
{
    super.onPause();
    mBundleRecyclerViewState = new Bundle();
    mListState = mImgList.getLayoutManager().onSaveInstanceState();
    mBundleRecyclerViewState.putParcelable(KEY_RECYCLER_STATE, mListState);
}

,

@Override
protected void onResume()
{
    super.onResume();
    if (mBundleRecyclerViewState != null) {
        mListState = mBundleRecyclerViewState.getParcelable(KEY_RECYCLER_STATE);
        mImgList.getLayoutManager().onRestoreInstanceState(mListState);
    }
}

Но это работает, когда я нажимаю кнопку "Назад" в Занятии B и перехожу в Занятие A, а затем возвращаюсь в Занятие B из Занятия A.

1 ответ

Восстановите состояние в onRestoreInstanceState()

protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);

// Retrieve list state and list/item positions
if(state != null)
   mListState =   mBundleRecyclerViewState.getParcelable(KEY_RECYCLER_STATE);
}
Другие вопросы по тегам