永远不会调用Fragment的onSaveInstanceState()

时间:2011-12-14 11:19:51

标签: android android-fragments

我正在尝试将数据保存在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
    }

}

6 个答案:

答案 0 :(得分:68)

我终于找到了问题,至少在我的情况下。我的FragmentActivity中有一个被覆盖的onSaveInstanceState,但没有调用super.onSaveInstanceState(Bundle outState)。一旦我添加了,Fragment.onSaveInstanceState(Bundle outState)正常运行。

答案 1 :(得分:31)

我遇到了同样的问题,并尝试了onSaveInstanceState()方法,但没有用。

我认为onSaveInstanceState()仅适用于用户从一个活动跳转到另一个活动并返回的场景,它不适用于用户在同一活动中的片段之间跳转的场景。

这是Google的指南文档。 http://developer.android.com/guide/components/tasks-and-back-stack.html#ActivityState

答案 2 :(得分:6)

要检查的一件事是通过在AndroidManifest.xml中包含android:configChanges标志来确保包含该片段的Activity不会阻止重新启动。

答案 3 :(得分:6)

在某些情况下,您可能会发现使用片段参数而不是savedInstanceState会很有帮助。 Further explanation

答案 4 :(得分:-1)

尝试在“活动”中调用FragmentManager#saveFragmentInstanceStateFragment#setInitialSavedState。 您调用saveFragmentInstanceState,然后框架将调用onSaveInstanceState。你调用setInitialSavedState,然后框架将调用onCreateView,没有空参数'Bundle savedInstanceState'。

答案 5 :(得分:-6)

尝试在onCreate(Bundle savedInstanceState)中调用setRetainInstance(true)