对第一次创建片段然后重新附加到活动时在片段的回调中获得的 savedInstanceState 包有疑问。
所以我使用 setRetainInstance(true),因此片段不应该被破坏,而只是在活动被破坏时从活动中分离出来,然后在活动被重新创建时重新连接回来,例如配置更改。
所以,因为使用这个 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 应该始终为空时,如何才能进入该 if 语句。
现在的问题:
Android 是否保证 setRetainInstance(true)
在片段上使用时,传递给回调的 savedInstanceState 包总是为空?
谢谢你们的回答!