OnActivityResult 未被调用

OnActivityResult not getting called

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

Activity一个

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

您正在调用:activity 上的 startActivityForResult 引用,它与您希望调用 onActivityResultCustomDialog 不同。我不记得曾经在非前台的 activity 实例上调用过 startActivityForResult - 我不确定它是否会起作用。我建议您将:activity.startActivityForResult 更改为 startActivityForResult

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

不调用 onActivityResult() 的原因是当您为结果启动 activity 时调用 onActivityResult() 即 startActivityForResult(...) 然后当启动 activity returns 或完成 onActivityResult() 被调用

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

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 将在 Activity A 中调用,而不是您的自定义对话框,因为您使用了 activity 变量。

您有 2 个修复选项:

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

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