android多层Fragment嵌套,内部Fragment接收不到OnActivityResult()方法的回调的解决方案

有段时间不写博客了,但是今天这个问题浪费了我两天的时间,所以有必要做个笔记。项目中有个需求就是多个tab控制多个界面,所以就是Fragment–TabLayout+ViewPager–内嵌多个Fragment,看着没啥问题,但是子Fragment中有个选择图片的操作,结果问题来了,OnActivityResult()不回掉,当时我就想到嵌套返回的问题,所以在最外层的Fragment的OnActivityResult()做了对应处理,但是只有Tab的index=0的fragment可以返回图片信息,其他index大于零的都是一闪而过,而且不报红,这个就有点坑了,最后在Logcat里发现这么一条警告“FragmentActivity: Activity result fragment index out of range”,看着好像是说下标越界了,所以我立马去FragmentActivity中搜这个log,结果就看到了下面的代码:

在这里插入图片描述
看到index = requestCode>>16,index是通过请求码做位运算算出的,并不是我们每个子fragment实际对应的下标值,所以就出现越界的情况,而且这里也没有抛异常,明显是没考虑多层嵌套的问题;

解决方案

1、在子fragment直接getParentFragment().startActivityForResult(intent, requestCode);去开启新界面

getParentFragment().startActivityForResult(intent, requestCode)

2、在最外层的fangment的onActivityResult(int requestCode, int resultCode, Intent data)去获取对用子fragment的应用去执行对应的逻辑处理方法;例如

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       onActivityResult(requestCode, resultCode, data);
        ChildFragment cf=mFragments.get(index);
        //方法一 调用子Fragment的onActivityResult,然后子Fragment去处理自己的onActivityResult逻辑
        cf.onActivityResult(requestCode, resultCode, data);
        //方法2 直接在子fragment中提供对应的业务处理的public方法,一步到位
        cf.doSomething(data);
    }

总结

两层嵌套的返回处理掌握i了,n层嵌套也是一样的原理,如果有啥新思路可以留言评论,相互学习

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值