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,结果就看到了下面的代码:

android多层Fragment嵌套,内部Fragment接收不到OnActivityResult()方法的回调的解决方案
看到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层嵌套也是一样的原理,如果有啥新思路可以留言评论,相互学习

上一篇:Android Activity利用setResult赋值


下一篇:windows 10安装minikube