关于Fragment嵌套的一些坑

1.      当子Fragment不管通过getActivity().startActivityForResult还是getParentFragment.startActivityForResult方式去启动Activity,子Fragment都接收不到OnActivityResult,只能通过父Fragment传递数据进去,进而更新子Fragment

2.      当子Fragment出现NO Activity异常时,需要在父Fragment重写detached方法,目的是reset ChildFragmentManager。

@Override

  public voidonDetach() {

   super.onDetach();

    try {

      FieldchildFragmentManager = Fragment.class

         .getDeclaredField("mChildFragmentManager");

     childFragmentManager.setAccessible(true);

      childFragmentManager.set(this,null);

 

    } catch(NoSuchFieldException e) {

      throw newRuntimeException(e);

    } catch(IllegalAccessException e) {

      throw newRuntimeException(e);

    }

  }

3.      commit和commitAllowingStateLoss的区别

在commit()方法之前,你可以调用addToBackStack(),把这个transaction加入back stack中去,这个back stack是由activity管理的,当用户按返回键时,就会回到上一个fragment的状态。
你只能在activity存储它的状态(当用户要离开activity时)之前调用commit(),如果在存储状态之后调用commit(),将会抛出一个异常。
这是因为当activity再次被恢复时commit之后的状态将丢失。如果丢失也没关系,那么使用commitAllowingStateLoss()方法。

4.      在设置Fragment布局时,使用replace方法时,要设置android:name,不然会报空指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值