Activty嵌套多个Fragment,然后Fragment里面再嵌套多个Fragment,外层的Fragment切换得快了或者横竖屏切换就会报错:
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1460)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:634)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:613)
怎么解决?
报错的是外层Fragment内的下面这段代码:
IndexListFragment indexHotFragment = new IndexListFragment();
Bundle bundle = new Bundle();
switch (id) {
case 1:
bundle.putSerializable("list", audit_handles);
bundle.putInt("id", 1);
break;
case 2:
bundle.putSerializable("list", pos_handles);
bundle.putInt("id", 2);
break;
case 3:
bundle.putSerializable("list", audit_lists);
bundle.putInt("id", 3);
break;
case 4:
bundle.putSerializable("list", pos_lists);
bundle.putInt("id", 4);
break;
default:
break;
}
indexHotFragment.setArguments(bundle);
FragmentManager fragmentManager = getChildFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(flContainer, indexHotFragment);
ft.commit();
然后我查了网上的资料,都说加下面一段:
@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager ");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
这个方法怎么用,“mChildFragmentManager”需要替换成什么,,感觉不管用呢?
Sebenarnya, satu cara ialah
if(getActivity()==null){
return;
}
if(getActivity().isFishing()){
return;
}
Saya tidak tahu sama ada anda boleh memahami maksud saya.
Anda perlu memulihkan serpihan yang disimpan untuk anda dalam FragmentManager.
Sebelum mencipta serpihan, semak savedInstanceState, seperti ini:
Selain itu, saya ingin tahu tentang cara anda menambah serpihan apabila ia bersarang. Bukankah anda juga menggunakan refleksi untuk mendapatkan mChildFragmentManager dan kemudian mengendalikannya
getChildFragmentManager()
Anda boleh mendapatkan childFragmentManager.Untuk butiran, sila rujuk https://segmentfault.com/q/10...