我错过了什么或Fragment
没有onRestoreInstanceState()
方法吗?如果没有,我该如何获得类似的东西?
答案 0 :(得分:188)
答案 1 :(得分:38)
我知道,你已经接受了答案,但是你应该阅读official documentation about fragments,它会说(段落#34;处理片段生命周期"):
您可以使用Bundle保留片段的状态,以防活动的进程被终止,并且您需要在重新创建活动时恢复片段状态。您可以在片段的onSaveInstanceState()回调期间保存状态,并在onCreate(),onCreateView()或onActivityCreated()
期间恢复它。
因此,您可以使用最适合您的方式:onCreate()
,onCreateView()
或onActivityCreated()
答案 2 :(得分:25)
在片段指南的ListFragment example中,您可以找到:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
您可以这样使用:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
// Restore last state for checked position.
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
}
}
片段从堆栈返回后调用 onActivityCreated()
。
答案 3 :(得分:10)
Fragment
的{p} onViewStateRestored
相当于onRestoreInstanceState
的{{1}}。但它在Activity
之后和onActivityCreated(Bundle)
之前调用。
答案 4 :(得分:0)
onActivityCreated is deprecated。我发现它在片段生命周期方面令人困惑。只需这样做:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}
//然后:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
savedIInistanceState?.let{
//restore the data here
}
}