我一直试图弄清楚是什么导致我的应用程序在两个ListView
s 中丢失数据,两个选项卡中的每个选项卡中的一个,这两个选项卡都是ListFragment
s。ListView
当您将应用程序放在最前面时,手机上的s 随机为空。
我猜我在恢复应用程序时缺少数据恢复方式。通常,应用程序恢复并且两个选项卡中的数据都在那里。
但是,似乎只有在真正的手机上,数据才会从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<MyObject> 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<MyObject> 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();
}
}
}