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);
}