我正在使用无视图片段在我的活动方向更改期间存储一些数据。它看起来大致是这样的:
public class BoardActivity extends BaseActivity {
private DataHandler mDataHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// initialize the data handler
mDataHandler = (DataHandler)mFragmentManager.findFragmentByTag("data");
if (mDataHandler == null) {
mDataHandler = new DataHandler();
mFragmentManager.beginTransaction().add(mDataHandler, "data").commit();
// initialize the data
mDataHandler.mThreads = ...;
} else {
// here, the data is taken and the ListView is filled again.
fillView();
}
}
public static class DataHandler extends Fragment {
private Topic[] mThreads;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
}
}
发生的情况是,当 Activity 离开时(例如使用主页按钮)并且由于某种原因在后台被杀死,应用程序在该 Activity 重新启动时崩溃。原因是虽然 FragmentmDataHandler
被 FragmentManager 找到了,但它的 Member 变量 ( mThreads
) 是null
.
为什么 Fragment 本身可以保留,但其变量设置为零?