片段 onActivityResult 方法执行调用活动 onActivityResult
Posted
技术标签:
【中文标题】片段 onActivityResult 方法执行调用活动 onActivityResult【英文标题】:Fragment onActivityResult method on executing calls activity onActivityResult 【发布时间】:2013-05-02 07:49:15 【问题描述】:在我的片段中,我已经启动了用于照片捕获的 startActivityforresult 意图。我已经覆盖了片段类中的 onActivityResult 回调方法。我已经在主要活动中为其他一些意图实现了 onActivityResult 回调。我的问题是执行调用活动 onActivityResult 方法并返回空指针异常后的片段 onActivityResult。 分片onactivityresult方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
prof_bitmap = null;
if (requestCode == 0)
Log.e("" ,"entered activity Result Code 0");
Uri photoUri = data.getData();
if (photoUri != null)
String[] filePathColumn = MediaStore.Images.Media.DATA ;
Cursor cursor = getActivity().getContentResolver().query(
photoUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Log.e("" ,"File Path" +filePath);
prof_bitmap = setImage(filePath);
if (requestCode == 1)
Log.e("" ,"entered activity Result Code 1");
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
prof_bitmap = bitmap;
Log.e("" ,"entered activity Result Code 1"+bitmap);
profile_pic.setImageBitmap(bitmap);
Activity onActivityResult
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Log.e("" ,"called onActivityResult in main");
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
如何只调用fragment onactivityresult方法?
我的日志猫
传递结果失败 ResultInfowho=null, request=1, result=-1, data=Intent act=inline-data dat=content://media/external/images/media/222 (有附加) 到活动 com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity:java.lang.NullPointerException
【问题讨论】:
删除片段中的超级调用 看到这个链接可能对你有帮助:androidtutorialonline.com/onactivityresult-in-fragment 【参考方案1】:如果你的Activity中定义了onActivityResult,你不能跳过它直接进入Fragment。但是,如果 Activity 不知道如何处理它,您可以将其重定向到 Fragment。使用唯一的 requestCodes 来区分谁处理结果。
public void onActivityResult(int requestCode, int resultCode, Intent data)
boolean processed = true;
if (resultCode == Activity.RESULT_OK)
if (requestCode == 0)
// Something
else if (requestCode == 1)
// Something
else
processed = false;
else // Error
if (requestCode == 0)
// Handle error
else
processed = false;
if (!processed)
fragment1.onActivityResult(requestCode, resultCode, data);
fragment2.onActivityResult(requestCode, resultCode, data);
...
super.onActivityResult(requestCode, resultCode, data);
注意:确保从片段中调用 getActivity().startActivityForResult() 而不是简单地使用 this.startActivityForResult()
public void something(Intent intent)
getActivity().startActivityForResult(intent);
// or if you are using SherlockActionBar/Support package
getSupportActivity().startActivityForResult(intent);
希望这会有所帮助。
【讨论】:
这意味着您从 Fragment 错误地调用 startActivityForResult() 。您需要调用 getActivity().startActivityForResult()。我将更新答案以包含此内容。 我已经实现了上述但在传递结果信息错误空指针异常时失败 请检查上面的 logcat 为什么我在根活动之前调用了片段的onActivityResult
?【参考方案2】:
尝试删除片段onActivityResult()
中的super.onActivityResult(requestCode, resultCode, data);
行。
【讨论】:
如果退出/关闭activity,必须调用activity方法onActivityResult()
。我建议您删除片段方法并仅按活动使用onActivityResult()
。【参考方案3】:
当您以startActivityForResult
开始的Activity
完成调用finish()
时,将调用public void onActivityResult
【讨论】:
【参考方案4】:Activity 中的 onActivityResult 将被首先调用,你不应该删除 Activity 中的结果处理,而是通过检查 requestCode 来做你想做的事情。
【讨论】:
【参考方案5】:我也面临这个问题。
从片段调用活动
((Activity)context).startActivityForResult(photoPickerIntent, 100);
这里是来自 FragmentActivity 的“上下文”。现在结果来自 FargmentActivity onActivityResult 方法。要切换此结果,您必须在 fragmetn 活动类中声明片段类的静态变量。
static ActivityUploadPhotos activityUploadPhotos;
...
ActivityUploadPhotos f = new ActivityUploadPhotos();
ActivityHome.activityUploadPhotos=f;
......
if(activityUploadPhotos!=null)
activityUploadPhotos.onActivityResult(requestCode, resultCode, data);
【讨论】:
以上是关于片段 onActivityResult 方法执行调用活动 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章
从片段捕获图像时从不调用onActivityResult [重复]
OnActivityResult Fragment 中的方法已执行,但 View 中没有发生任何事情
关于片段生命周期,何时调用片段的 onActivityResult?