我想要保留一些数据,并且我遵循开发人员指南Here并创建了一个数据片段类,以保存我的所有数据。
在onCreate中我使用以下逻辑来确定Data Fragment是否为null(在开发人员指南中也有描述):
find the retained fragment on activity restarts
FragmentManager fm = getFragmentManager();
dataFragment = (DataFragment) fm.findFragmentByTag(“data”);
// create the fragment and data the first time
if (dataFragment == null) {
// add the fragment
dataFragment = new DataFragment();
fm.beginTransaction().add(dataFragment, “data”).commit();
// load the data from the web
dataFragment.setData(loadMyData());
} else {
//loading data from dataRestoreFragment
}
super.onCreate(savedInstanceState);
但是,即使更改了oriention,dataFrag仍然是NULL! 这有什么不对?
编辑:
数据碎片代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain this fragment
setRetainInstance(true);
}
我必须提一下,如果我在super.onCreate(savedInstanceState)之后检查datafrag;它会工作并返回正确的片段,但问题是,我的另一个片段是ListFragment,它的适配器将在恢复数据之前被调用,这样我就无法将数据加载到该片段中,并且片段将没有数据和原因崩溃的应用程序! 如果将代码放在super.onCreate(savedInstanceState)之前,它将在Listfragment适配器之前执行,但它为null!
所以我该如何解决这个问题?
答案 0 :(得分:0)
如果我在super.onCreate(savedInstanceState)之后检查datafrag;它会工作并返回正确的片段
然后这样做。
我的另一个片段是ListFragment,它的适配器将在恢复数据之前被调用,因此我无法将数据加载到该片段中,并且该片段将没有数据并导致应用程序崩溃!
然后你的“被调用”逻辑在该片段中的方法是错误的。您需要稍后在片段的生命周期中移动该逻辑,例如onViewCreated()
或onActivityCreated()
。
答案 1 :(得分:-1)
尝试添加类似的内容;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
dataFragment.setData(collectMyLoadedData());
}