fragment的知识和相关问题

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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值