私は、アプリがListView
2つのタブのそれぞれに1つずつ、2つの秒でデータを失う原因を突き止めようとして立ち往生しています。どちらも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();
}
}
}