片段的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 } } 

我终于弄清楚了这个问题,至less在我的情况下。 我没有调用super.onSaveInstanceState(Bundle outState)在我的FragmentActivity重写onSaveInstanceState 。 一旦我添加了, Fragment.onSaveInstanceState(Bundle outState)正常运行。

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

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

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

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

在某些情况下,您可能会发现使用片段参数而不是savedInstanceState 。 进一步解释 。

尝试在Activity中调用FragmentManager#saveFragmentInstanceState和Fragment#setInitialSavedState 。 你调用saveFragmentInstanceState,那么框架就会调用onSaveInstanceState。 而你调用setInitialSavedState,那么框架将调用onCreateView没有null参数“Bundle savedInstanceState”。

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