Как сохранять состояние RecyclerView?

243
12 октября 2017, 10:05

На данный момент приложение сохраняет состояние RecyclerView при выходе на рабочий стол через клавишу Home. Однако, если я уйду на другой фрагмент, или выйду на рабочий стол клавишей "Назад", и вернусь обратно во фрагмент- состояние RecyclerView не сохранится!

Как сохраняю сейчас:

@Nullable @BindView(R.id.feedList) RecyclerView recyclerView;
@Override
public void onSaveInstanceState(Bundle outState){
    super.onSaveInstanceState(outState);
    //If we catch an exception, it means that recyclerView is not yet created.
    try{
        outState.putParcelable(RECYCLER_VIEW_STATE, recyclerView.getLayoutManager().onSaveInstanceState());
    } catch(Exception ex){
        ex.printStackTrace();
    }
}
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState){
    super.onViewStateRestored(savedInstanceState);
    //If we catch an exception, it means that recyclerView is not yet created.
    try{
        layoutManagerState = savedInstanceState.getParcelable(RECYCLER_VIEW_STATE);
    } catch(Exception ex){
        ex.printStackTrace();
    }
}

@Override
public void onResume(){
    super.onResume();
    if(layoutManagerState != null &&
            recyclerView != null &&
            recyclerView.getLayoutManager() != null){
        recyclerView.getLayoutManager().onRestoreInstanceState(layoutManagerState);
    }
}
@Override
public void onPause(){
    super.onPause();
    if(layoutManagerState != null && recyclerView != null){
        layoutManagerState = recyclerView.getLayoutManager().onSaveInstanceState();
    }
}
Answer 1

Вы можете указать в манифесте атрибут launchMode равный singleTop

singleTop —говорит нам о том, что Activity может распологаться в стеке несколько раз. Новая запись в стеке создается только в том случаи, если данная Activity не расположена в вершине стека. Если она на данный момент является вершиной, то у нее сработает onNewIntent() метод, но она не будет пересоздана.

Если вам это необходимо только для BackStack, то вы можете через intent передать флаг FLAG_ACTIVITY_SINGLE_TOP

READ ALSO
Вызвать метод класса Activity из ViewHolder

Вызвать метод класса Activity из ViewHolder

Имеем ReciclerView, на экране отображается списокСписок обновляется каждые 5 сек

224
Найти совпадения в полях объектов

Найти совпадения в полях объектов

У меня есть List<Document> listOfDocuments = new ArrayList<>() объектов

182
Поиск по подстроке Hibernate

Поиск по подстроке Hibernate

Есть таблица c полем descriptionКак мне сделать поиск в таблице по этому полю так, чтоб выводились не только записи в которых description полностью совпадает...

278