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