我正在尝试将数据保存在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
}
}
答案 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#saveFragmentInstanceState和Fragment#setInitialSavedState。 您调用saveFragmentInstanceState,然后框架将调用onSaveInstanceState。你调用setInitialSavedState,然后框架将调用onCreateView,没有空参数'Bundle savedInstanceState'。
答案 5 :(得分:-6)
尝试在onCreate(Bundle savedInstanceState)
中调用setRetainInstance(true)
。