OnSaveInstanceState () фрагмента никогда не вызывается - PullRequest
61 голосов
/ 14 декабря 2011

Я пытаюсь сохранить данные в 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
    }

}

Ответы [ 6 ]

68 голосов
/ 06 января 2012

Я наконец понял проблему, по крайней мере, в моем случае.У меня была переопределенная onSaveInstanceState в моей FragmentActivity, которая не вызывала super.onSaveInstanceState(Bundle outState).Как только я добавил это, Fragment.onSaveInstanceState(Bundle outState) функционировал нормально.

32 голосов
/ 03 января 2014

Я столкнулся с тем же вопросом с вами и попробовал метод onSaveInstanceState (), но он не работал.

Я думаю, onSaveInstanceState () работает только для сценария, когда пользователь переходит от одного действия к другому, и обратно, он не работает в сценарии, когда пользователь переходит между фрагментами в одном и том же действии.

вот документ руководства от Google. http://developer.android.com/guide/components/tasks-and-back-stack.html#ActivityState

6 голосов
/ 02 августа 2014

В некоторых ситуациях может оказаться полезным использовать аргументы фрагмента вместо savedInstanceState. Дальнейшее объяснение .

6 голосов
/ 14 декабря 2011

Необходимо проверить, чтобы убедиться, что действие, содержащее фрагмент, не препятствует перезапуску, включив флаг android:configChanges в AndroidManifest.xml.

0 голосов
/ 17 октября 2013

Попробуйте вызвать FragmentManager # saveFragmentInstanceState и Fragment # setInitialSavedState в Activity. Вы вызываете saveFragmentInstanceState, тогда фреймворк вызовет onSaveInstanceState. И вы вызываете setInitialSavedState, тогда Framework будет вызывать onCreateView без нулевого аргумента «Bundle saveInstanceState».

0 голосов
/ 14 декабря 2011

Попробуйте позвонить setRetainInstance(true) в onCreate(Bundle savedInstanceState).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...