美文网首页
fragment中使用startActivityForResul

fragment中使用startActivityForResul

作者: 欧阳峰_oyf | 来源:发表于2017-04-10 16:31 被阅读0次

    在最近使用拍照的或者相册获取照片时候,在使用fragment 和 fragmentActivity组合,调用startActivityForResult方法可能没有响应。

    这时候需要注意几点:

    1.Fragment中直接使用startActivityForResult(); 不要使用this.getActivity().startActivityForResult();

    2.Fragment依附的Activity中如果重写了onActivityResult()方法,该方法中必须加上super.onActivityResult(requestCode, resultCode, data);( 要么在Activity中不重写onActivityResult()方法,亲测可用)。Fragment中的onActivityResult()方法中加不加super.onActivityResult(requestCode, resultCode, data)这句代码对结果没有影响。

    3.startActivityForResult()方法刚一调用,还没等activity返回,onActivityResult()方法已经执行完了。

    3.1 

    ①manifest中的activity设置了launchMode属性,其值不是标准模式(standard)。

    解决办法就是把launchMode属性去掉或者设置为标准模式

    ② Fragment在startActivityForResult的时候,使用了Intent.FLAG_ACTIVITY_NEW_TASK,跳转到新的任务栈导致onActivityResult()被执行。

    ③也可以在activity 的onActivityResult中把事件分发到每个fragment中


    @Override

    public voidonActivityResult(intrequestCode, intresultCode,Intent data) {

    super.onActivityResult(requestCode,resultCode,data);

    //将回调的传入到fragment中去

    List fragments =fm.getFragments();

    for(Fragment f:fragments){

    //直接分发给所有,一般会选择分发给单个的,那就直接选取当个fragment调用onActivityResult

    f.onActivityResult(requestCode,resultCode,data);

    }

    }

    相关文章

      网友评论

          本文标题:fragment中使用startActivityForResul

          本文链接:https://www.haomeiwen.com/subject/rorsattx.html