【发布时间】:2011-07-21 17:30:12
【问题描述】:
我是否遗漏了什么或者Fragments 没有onRestoreInstanceState() 方法?如果没有,我该如何获得类似的东西?
【问题讨论】:
标签: android save state android-fragments
我是否遗漏了什么或者Fragments 没有onRestoreInstanceState() 方法?如果没有,我该如何获得类似的东西?
【问题讨论】:
标签: android save state android-fragments
【讨论】:
我知道,您已经接受了答案,但您应该阅读official documentation about fragments,上面写着(“处理片段生命周期”段落):
您可以使用 Bundle 保留片段的状态,以防 Activity 的进程被终止,并且您需要在重新创建 Activity 时恢复片段状态。您可以在片段的 onSaveInstanceState() 回调期间保存状态并在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复它
所以,您可以使用最适合您的:onCreate()、onCreateView() 或 onActivityCreated()
【讨论】:
在 Fragments 指南的 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()。
【讨论】:
Fragment 的onViewStateRestored 相当于Activity 的onRestoreInstanceState。但它是在onActivityCreated(Bundle) 之后和onStart() 之前调用的。
【讨论】:
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
}
}
【讨论】: