Как добавить кастомизированный адаптер RecyclerView в outState в методе onSaveInstanceState что бы пересоздавать RecyclerView?
В приложении есть RecyclerView, в нём какие-то item сохраняются пользователем и живут.После того как приложение закрывается, RecyclerView ожидаемо становится пустым при открытии. Необходимо что бы при открытии приложения состояние RecyclerView сохранялось? Хочу делать это в onSaveInstanceState , сохранять адаптер и потом в onCreate его переопределять.Как это сделать?Какие плюсы и минусы этого метода? Как сделали бы вы?
Ответы (1 шт):
Получаете состояние(state) методом recyclerView.getLayoutManager().onSaveInstanceState();
и сохраняете в методе onSaveInstanceState() фрагмента или активити. Там же сохраняете список элементов.
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelableArrayList(ARRAY_LIST_RESULTS, list);
outState.putParcelable(LIST_STATE, recyclerView.getLayoutManager().onSaveInstanceState());
}
При восстановлении, получаете из бандла сохраненный список и скармливаете адаптеру, а также восстанавливаете state.
list = savedInstanceState.getParcelableArrayList(ARRAY_LIST_RESULTS);
Parcelable listState = savedInstanceState.getParcelable(LIST_STATE);
if(listState != null) {
recyclerView.getLayoutManager().onRestoreInstanceState(listState);
}
Если у вас фрагмент, то установите флаг setRetainInstance(true); и состояние экрана должно сохраняться и восстанавливаться без дополнительного кода. Но это не точно)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}