解决方法是加了activity调用
activity.startActivityForResult(intent, RESULT_CODE_SELECT_PIC);
基类Activity中代码实现
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(null != fragmentTabContentAdapter){
for(int i=0;i<fragmentTabContentAdapter.getCount();i++){
BaseFragment baseFragment = fragmentTabContentAdapter.getFragment(i);
if(null != baseFragment)baseFragment.execOnActivityResult(requestCode, resultCode, data);//基activityResult
}//end of for
}//end of if
}
FramentFirst中调用
@Override
public void execOnActivityResult(int requestCode, int resultCode, Intent data) {
super.execOnActivityResult(requestCode, resultCode, data);
switch (requestCode){
case RESULT_CODE_SELECT_PIC:
if (data == null) return;
if (resultCode == RESULT_OK) {
ArrayList<String> result = data.getStringArrayListExtra(PhotoPickerActivity.KEY_RESULT);
String picFile = result.get(0);
if(!TextUtils.isEmpty(picFile)){
ImageLoader.getInstance().displayImage("file:///"+picFile,iv_user_header);
}
}
break;
}
}
原理:
在BaseActivity中重写onActivityResult()并返回execOnActivityResult()
在BaseFrament中重写了execOnActivityResult()
最后在所用到的Frament中就调用
补充:
1.这是在Activty中写的case 里是要返回到Fragment中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode){
case 1://该结果码要与Fragment中的一致
super.onActivityResult(requestCode,resultCode,data);
break;
case 2:
super.onActivityResult(requestCode,resultCode,data);
break;
......
}
}
2.在Frament中就回调过来了
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode){
case 1://该结果码与FragmentActivity中是保持一致的
//在这里获取你需要的数据
break;
case 2:
break;
}
}