Восстановить позицию прокрутки RecyclerView после выполнения Fragment replace () - PullRequest
0 голосов
/ 29 августа 2018

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

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

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

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

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

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

Ответ, предлагающий использовать add() вместо replace(), не приветствуется.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

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

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

0 голосов
/ 29 августа 2018

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

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

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

...