Я имею дело со странным поведением жизненного цикла фрагмента.
У меня есть действие, содержащее два фрагмента: CityFragment - для отображения списка городов и WeatherFragment - для отображения прогноза погоды для выбранного города.
При запуске приложения на экране отображается CityFragment, когда пользователь выбирает город - WeatherFragment добавляется через supportFragmentManager с backstack.Затем, если пользователь хочет повернуть экран, я получаю ситуацию на картинке
- 0-2 - CitiesFragment запущен
- 3-7 - Пользователь выбирает город, и на экране отображается WeatherFragment
- 8-18 - поворот экрана
Как видно из журналов, сразу после выбора города пользователемonStop и onDestroyView вызываются для CitiesFragment, фрагментный вид после того, как это будет нулевым.Но когда экран поворачивается, вызывается CitiesFragment onSaveInstanceState (когда представление уже уничтожено).
Проблема здесь заключается в том, что после преобразования кода в kotlin и использования синтетического для доступа к представлению я получаю исключение NullPointerException в onSaveInstanceState, когдаЯ хочу сохранить первый видимый элемент recyclerview для восстановления после
val firstVisiblePosition = (recycler_view_cities.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
со старой реализацией Java, он отлично работает, потому что я храню ссылку на recycler_view_cities во фрагменте и могу получить к ней доступ.
- Вопрос 1. Разве нельзя вызывать состояние onSaveInstance для CitiesFragment перед onStop и onDestroyView?
- Вопрос 2. Как справиться с такой ситуацией?