【发布时间】:2013-04-02 20:29:10
【问题描述】:
我已经看到了一些关于onSaveInstanceState 没有被Fragments 调用的类似问题,但在我的情况下Fragments 工作正常,主要的FragmentActivity 有问题。
相关代码看起来相当简单:
public class MyFActivity extends FragmentActivity implements ActionBar.TabListener {
String[] allValues; // data to save
@Override
protected void onSaveInstanceState (Bundle outState) {
Log.d("putting it!", allValues.toString());
outState.putStringArray("allValues", allValues);
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
allValues = savedInstanceState.getStringArray("allValues");
Log.d("getting it!", allValues.toString());
}
}
}
暂停活动时(使用后退按钮),永远不会调用 onSaveInstanceState,因此,在恢复应用程序时,savedInstanceState 始终是 onCreate 方法中的 null。我尝试添加这样的块:
@Override
public void onPause() {
super.onPause();
onSaveInstanceState(new Bundle());
}
这是在https://stackoverflow.com/a/14195202/362657 中建议的,但是当onSaveInstanceState 然后被调用时,savedInstanceState 在onCreate 方法中仍然是null。我错过了什么?
【问题讨论】:
-
“暂停活动时(使用后退按钮)”通常会破坏片段,因此
savedInstanceState会丢失。当您旋转设备时,您是否在onCreate()中看到了相应的saveInstanceState? -
而不是 onCreate,也许您应该使用 onResume()?如果活动只是暂停,那么 onCreate() 不应该被再次调用,onResume() 应该
-
嗯,这就解释了!毁了它。
标签: android android-fragmentactivity