Фрагмент onSaveInstanceState() никогда не называется
Я пытаюсь сохранить данные в Fragment onSaveInstanceState(), но метод никогда не вызывается.
Может кто-нибудь помочь?
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ScrollView content = (ScrollView) inflater.inflate(R.layout.content, container, false);
// More stuff
return content;
}
@Override
public void onSaveInstanceState(Bundle icicle) {
// NEVER CALLED
super.onSaveInstanceState(icicle);
//More stuff
}
}
Ответы
Ответ 1
Наконец-то я выяснил проблему, по крайней мере, в моем случае. У меня был переопределенный onSaveInstanceState
в моем FragmentActivity, который не вызывал super.onSaveInstanceState(Bundle outState)
. Как только я добавил, что в, Fragment.onSaveInstanceState(Bundle outState)
функционировал нормально.
Ответ 2
Я столкнулся с тем же вопросом с вами и попробовал метод onSaveInstanceState(), но не работал.
Я думаю, что onSaveInstanceState() работает только для сценария, когда пользователь перескакивает с одного действия на другой и обратно, он не работает в сценарии, который пользователь перескакивает между фрагментами в одной и той же активности.
вот справочный документ от Google. http://developer.android.com/guide/components/tasks-and-back-stack.html#ActivityState
Ответ 3
Одна вещь, которую нужно проверить, - убедиться, что Activity, содержащий фрагмент, не предотвращает перезапуск, включая флаг android:configChanges
в AndroidManifest.xml.
Ответ 4
В некоторых ситуациях может оказаться полезным использовать аргументы фрагмента вместо savedInstanceState
. Дальнейшие объяснения.
Ответ 5
Попробуйте вызвать FragmentManager # saveFragmentInstanceState и Фрагмент # setInitialSavedState в деятельности.
Вы вызываете saveFragmentInstanceState, тогда фреймворк будет вызывать onSaveInstanceState. И вы вызываете setInitialSavedState, тогда фреймворк будет вызывать onCreateView без нулевого аргумента 'Bundle savedInstanceState'.
Ответ 6
Попробуйте вызвать setRetainInstance(true)
в onCreate(Bundle savedInstanceState)
.