【发布时间】:2013-03-10 19:49:59
【问题描述】:
对第一次创建片段然后重新附加到活动时在片段的回调中获得的 savedInstanceState 包有疑问。
所以我使用 setRetainInstance(true),因此片段不应该被销毁,而只是在 Activity 被销毁时从 Activity 中脱离,然后在配置更改时重新创建 Activity 时重新附加回来。
因此,因为使用此 setRetainInstance(true),这将导致 savedInstanceState 包在片段的回调中始终为空,例如:onActivityCreated()、onCreate() 等。
到目前为止一切顺利,现在我从一些用户那里得到了一些崩溃(一个非常小的数字),这是由于片段上的这个 savedInstanceState 不为 null 引起的。
所以,onActivityCreated() 回调正在做这样的事情:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
adapter = new CustomAdapter(getActivity(), getListView(), data, savedInstanceState);
setListAdapter(adapter);
setupEmptyListView();
getListView().setOnScrollListener(this);
}
CustomAdapter 在某个时刻从其构造函数调用 loadInstanceState() 方法来完成其工作,代码如下:
@Override
public void loadInstanceState(Bundle savedInstanceState) {
if (savedInstanceState != null) {
//do some stuff which is causing a crash
}
}
现在我的问题是,当我传递的 savedInstanceState 应该始终为 null 时,如何才能进入该 if 语句。
现在是问题:
Android 是否保证在使用时 setRetainInstance(true) 在片段上,传递给回调的 savedInstanceState 包总是为空?
谢谢大家的回答!
【问题讨论】:
-
我想你需要通知
onSaveInstancemethod