내 앱이 두 개의 각 탭에있는 두 개의 ListView
에있는 데이터를 잃게되는 원인을 알아 내려고 노력했습니다. 둘 다 ListFragment
입니다. 앱을 최전선에 가져올 때 ListView
은 전화에서 무작위로 비어 있습니다.Android Life Cycle - 데이터가 다시로드되지 않음
응용 프로그램을 복원 할 때 데이터를 복원하는 방법이 누락되었다고 생각합니다. 일반적으로 앱 복원 및 두 탭의 데이터가 모두 있습니다.
그러나 실제 휴대 전화에서만 보이는 것처럼 데이터는 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();
}
}
}
그냥 오타라고하지만,'onRestart'라고하고'super.onResume()'을 호출합니까? – Luksprog
나는 실제로 그것을 알아 차렸고 내 앱의 버그였습니다. 어쩌면 그것을 고칠 것이고, 우리는 보게 될 것입니다. 잘 잡아 – Kirk
'onRestart'를 사용하고 있다면 백그라운드에서 활동이 종료되지 않으면 그 콜백은 호출되지 않습니다. 'onResume'을 호출 할 때마다 매번 호출되어 다시 액티비티로 돌아올 때마다 프래그먼트가 새로 고쳐 져야합니다. – Luksprog