Фрагмент 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'.