在最近使用拍照的或者相册获取照片时候,在使用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);
}
}