fragment中使用startActivityForResult的回调问题

在最近使用拍照的或者相册获取照片时候,在使用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中使用startActivityForResult的回调问题)