片段 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?

片段中未调用 onActivityResult

从图库中选择照片(onActivityResult()问题 - 我想是这样) - 片段Android

onActivityResult 不会从 viewPager 片段调用