我一直试图弄清楚是什么导致我的应用程序丢失了两个ListView
中的数据,两个选项卡各有一个ListFragment
s。当您将应用程序带到最前端时,ListView
在手机上随机为空。
我猜测我在备份应用程序时缺少了如何恢复数据的内容。通常,应用程序恢复和两个选项卡中的数据都在那里。
然而,仅在真实的手机上,数据将从ListView
消失,但我找不到可重复的模式。
我已经使用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();
}
}
}
答案 0 :(得分:1)
您的代码中有一个小错字,您使用了onRestart
回调,但是从超类而不是onResume
调用了super.onRestart();
方法。