Восстановить позицию прокрутки 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 действия.