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);
}