OnActivityResult 没有被调用

Posted

技术标签:

【中文标题】OnActivityResult 没有被调用【英文标题】:OnActivityResult not getting called 【发布时间】:2019-03-31 23:39:22 【问题描述】:

在活动 A 中,我想打开一个对话框 (CustomDialog)。在 CustomDialog 内部,它有一个打开相机的按钮。但是onActivityResult 在我从图库中选择图像后没有被调用。没有 toast 正在显示。

活动 A

private void openDialog() 
        CustomDialog alert = new CustomDialog();
        alert.showDialog(this);
    

自定义对话框

public class CustomDialog extends Activity

    Activity activity;
    ImageView imageView;

    public void showDialog(Activity activity) 
        this.activity = activity;
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.custom_dialog);
        dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        dialog.setCanceledOnTouchOutside(true);

        imageView = (ImageView) dialog.findViewById(R.id.logoApp);

        Button galleryBtn = (Button) dialog.findViewById(R.id.galleryBtn);

        galleryBtn.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                galleryIntent();
            
        );
        dialog.show();
    

    private void galleryIntent() 
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);//
        activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
    

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        Toast.makeText(activity,"sdddddsss",Toast.LENGTH_LONG).show();
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) 
            if (requestCode == 1) 
                onSelectFromGalleryResult(data);
            else
              // ...
            
        
    

    @SuppressWarnings("deprecation")
    private void onSelectFromGalleryResult(Intent data) 
        Bitmap bm=null;
        if (data != null) 
            try 
                bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
             catch (IOException e) 
                e.printStackTrace();
            
        
        imageView.setImageBitmap(bm);
    

我关注这个http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample

【问题讨论】:

【参考方案1】:

当您在 Activity A 中显示对话框时,您将对 Activity A 的引用设置为参数: alert.showDialog(this); 然后在 CustomDialog 中,将此引用保存为活动变量:

public void showDialog(Activity activity) this.activity = activity; ...

这意味着,this.activity 是 Activity A 的实例。稍后在您的 galleryIntent() 中,您启动 Activity 以获得如下结果:

private void galleryIntent() ... activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);

这意味着 onActivityResult 将在活动 A 中调用,而不是在您的自定义对话框中,因为您使用了 activity 变量。

您有 2 个修复选项:

1) 将activity.startActivityForResult 替换为CustomDialog.this.startActivityForResult

2) 将您的 onActivityResult 代码从 CustomDialog 移至 Activity A

【讨论】:

我的项目流程是这样的:从firstActivity-->Activity A-->然后点击Activity A的按钮打开Custom Dialog。接下来在对话框中选择图像 ---> 在 Activity A 中显示 ---> 将所选图像返回到 firstActivity。一切正常 但在此之后,当我点击 firstActivity--> Activity A--> 然后再次返回 firstActivity 时,图像消失了。为什么会这样? 不看Activity A和firstActivity的代码很难判断。你如何存储图像?是否只存在于记忆中?当您返回时,您的活动可能被破坏/重新创建?或者,也许您在从 Activity A 到 firstActivity 的第二次转换期间返回空位图(当您没有通过对话框选择任何内容时)? 我的代码不多。请问我可以把我的项目发到 github 上供你查看吗? 好的,把你项目的链接发给我。【参考方案2】:

您正在调用:activity 引用上的 startActivityForResult,这与您希望调用 onActivityResultCustomDialog 不同。我不记得曾经在不是前台的活动实例上调用startActivityForResult - 我不确定它是否会起作用。建议你把:activity.startActivityForResult改成startActivityForResult

顺便说一句。在您的onActivityResult 中,您已经调用了两次super.onActivityResult(requestCode, resultCode, data);。这是不正确的。

【讨论】:

【参考方案3】:

onActivityResult() 没有被调用的原因是 onActivityResult() 是在你启动一个结果活动时调用的,即 startActivityForResult(...) 然后当启动的活动返回或完成时 onActivityResult() 被调用

【讨论】:

***.com/a/31279458/6565937 请参阅有关编写 CustomDialog 的链接以及正确使用 activityForResult() 的链接***.com/a/13433770/6565937

以上是关于OnActivityResult 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

拍照后onActivityResult没有调用

onActivityResult 没有在活动之间调用

片段内部未调用 onActivityResult [重复]

Android 在Fragment中执行onActivityResult不被调用的简单解决方法

Android的Fragment中onActivityResult不被调用的解决方案

片段中未调用 onActivityResult