1 添加傳回棧: addToBackStack(null)
public void replaceGoodDetailFragment() {
getChildFragmentManager()
.beginTransaction()
.replace(R.id.fl_left, goodDetailFragment,"good")
.addToBackStack(null)
.commit();
}
2 退出傳回棧:
//這是一次性退出傳回棧中的所有fragment:
purchaseFragment.getChildFragmentManager().popBackStackImmediate(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
//退出傳回棧最上面的frgament執行個體為: purchaseFragment.getChildFragmentManager().popBackStackImmediate(null, 0);
3 fragment的嵌套
主要是在父類的fragment裡面調用 getChildFragmentManager()來獲得子類的管理者對象
getChildFragmentManager()
.beginTransaction()
.replace(R.id.fl_left, titleFragment)
.commit();
4 frgament 嵌套出現的問題:
java.lang.IllegalStateException: Activity has been destroyed
at com.doimob.sysale.fragment.PurchaseFragment.replaceLeftFragment(PurchaseFragment.java:55)
04-28 17:19:44.921: E/AndroidRuntime(31605):
at com.doimob.sysale.fragment.PurchaseFragment.initData(PurchaseFragment.java:46)
04-28 17:19:44.921: E/AndroidRuntime(31605):
at com.doimob.sysale.fragment.BaseFragment.onActivityCreated(BaseFragment.java:41)
簡單來了解就是你嵌套的fragment雖然銷毀了,但是嵌套的fragment的管理者對象确沒有重置
是以就要在fragment的onAttach方法中
/**這是為了能夠讓子類的fragment管理者對象能夠重置掉*/
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);
}