Восстановить позицию прокрутки RecyclerView после выполнения Fragment replace()

У меня есть простое действие с двумя фрагментами: основной (содержит список элементов) и подробно. Экран сведений - это фрагмент, который отображается при нажатии элемента в основном списке. DetailFragment показывается с помощью replace(),

После перехода назад с подробного экрана я хотел бы иметь ту же самую позицию прокрутки в RecyclerView что я оставил это.

Пока replace() посвященные onDestroyView() а также onCreateView() цикл случится для MainFragment после возвращения из DetailFragment RecyclerView имеет позицию прокрутки 0 (вверху), потому что это совершенно новый RecyclerView который не имеет никакого отношения к тому, который был там до отъезда в DetailFragment,

replace() Этот фрагмент не инициируется onSaveInstanceState() чтобы быть вызванным, поэтому использование методов, изложенных здесь, не применимо.

Интересно, как правильно обращаться с этим вариантом использования?

Конечно, я могу сохранить позицию на onDestroyView() а потом вручную прокрутить до этой позиции, но, может быть, я упускаю какое-то очевидное решение?

Ответ, который предложит использовать add() вместо replace() не приветствуется

2 ответа

У меня было RecyclerView объявлен ребенком NestedScrollView, Это была проблема.

Когда я избавился от NestedScrollView все было обработано автоматически.

Как onSaveInstanceState() невозможно, попробуйте использовать ViewModel сохранить необходимые данные.

Когда вы объявляете и настраиваете адаптер на свое первое повторное представление, попробуйте перезвонить вашей actvity, передавая экземпляр адаптера, где в своей деятельности вы можете попытаться сохранить adapter instance or any required data в ViewModel вашей деятельности.

Как только вы вернетесь из своего фрагмента данных, вы сможете получить сохраненный экземпляр ваших данных reycycler из ViewModel действия.

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