我一直在试图弄清楚是什么导致我的应用程序丢失两个ListView中的数据,两个选项卡中的每一个中都有一个,这两个都是ListFragment s。当您将应用带到最前沿时,ListView s在手机上随机排空。Android生命周期 - 数据不重新加载
我猜想我错过了如何恢复数据时,将备份应用程序。通常,应用程序还原并且两个选项卡中的数据都存在。
但是,只有在真实的手机上,数据将从ListView s消失,但我找不到可重复的模式。
我用DDMS模拟了很多组合中的垃圾收集,我无法重现数据的丢失。下面是我如何处理生命周期,简化和基本全部的伪代码。
我已经看过生命周期结构,并认为我有它的工作。
我刷新不正确?
主要活动
public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
// I don't refresh here
// add both tabs to the tab adapter
}
public void onRestart() {
super.onRestart();
reloadTab1();
reloadTab2();
}
}
标签1
public class MyTab1 extends ListFragment {
static MyTab1Adapter mAdapter;
ArrayList mItems;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain state
setRetainInstance(true);
reloadTab1(getActivity());
}
public void reloadTab1(Context context) {
mItems = updateItems();
if (mAdapter == null) {
mAdapter = new MyTab1Adapter(context, R.layout.tab1, mItems);
setListAdapter(mAdapter);
}
else {
mAdapter.setNewList(mItems);
mAdapter.notifyDataSetChanged();
}
}
}
标签2
public class MyTab2 extends ListFragment {
static MyTab2Adapter mAdapter;
ArrayList mItems;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain state
setRetainInstance(true);
reloadTab2(getActivity());
}
public void reloadTab2(Context context) {
mItems = updateItems();
if (mAdapter == null) {
mAdapter = new MyTab2Adapter(context, R.layout.tab2, mItems);
setListAdapter(mAdapter);
}
else {
mAdapter.setNewList(mItems);
mAdapter.notifyDataSetChanged();
}
}
}
2012-08-23
Kirk
+1
只是我猜错了,但'onRestart'并调用'super.onResume()'? –
+0
我其实只是注意到这是我的应用程序中的一个错误。也许这会解决它,我们会看到。好赶上 –
+0
如果您使用'onRestart',那么回调将不会被调用,除非活动在后台被杀害。每次都会调用onResume,因此每次返回活动时都应刷新片段。 –