Пакет savedInstanceState всегда равен нулю после поворота устройства

#android #android-fragments #android-lifecycle #screen-rotation

#Android #android-фрагменты #android-жизненный цикл #поворот экрана

Вопрос:

(Я знаю, что этот вопрос задавался много раз раньше, но ни один из ответов, которые я прочитал, не помог.)

После поворота моего устройства мой фрагмент воссоздается, но пакет, полученный в onCreate / onViewStateRestored / etc., всегда равен нулю. Фрагмент имеет действительный идентификатор, а для параметра retainInstance установлено значение false.

Я пишу в пакет, предоставленный методу onSaveInstanceState, который вызывается, как и ожидалось, при повороте устройства. После поворота также вызываются все ожидаемые обратные вызовы жизненного цикла (onCreate, onActivityCreated, onViewStateRestored и т. Д.). Однако в каждом случае предоставленный пакет равен нулю.

Все, что я прочитал по этой теме, указывает на то, что фрагмент должен получить пакет, который был записан в onSaveInstanceState . Единственное, что я могу придумать, что может быть необычным, это то, что фрагмент находится внутри компонента графа навигации. Обратите внимание, что я не переопределяю onSaveInstanceState в действии.

Что может привести к тому, что пакет моего фрагмента станет нулевым после поворота?

Комментарии:

1. Начиная с фрагмента 1.1.0-alpha03 еще в декабре 2018 года, восстановленным фрагментам всегда присваивается значение, отличное от нуля Bundle . Какую версию фрагментов вы используете (пожалуйста, укажите dependencies раздел вашего build.gradle файла)? Пожалуйста, также укажите XML-файл и метод макета вашей активности onCreate() .

2. «androidx.navigation:фрагмент навигации: 2.3.1»

Ответ №1:

Оказывается, что переопределение onCreate в Activity и передавало null вместо savedInstanceState super.onCreate .