0
我一直在試圖弄清楚是什麼導致我的應用程序丟失兩個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<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();
}
}
}
只是我猜錯了,但'onRestart'並調用'super.onResume()'? – Luksprog
我其實只是注意到這是我的應用程序中的一個錯誤。也許這會解決它,我們會看到。好趕上 – Kirk
如果您使用'onRestart',那麼回調將不會被調用,除非活動在後臺被殺害。每次都會調用onResume,因此每次返回活動時都應刷新片段。 – Luksprog