繁体   English   中英

OnActivityResult没有被调用

[英]OnActivityResult not getting called

在活动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

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

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

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

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

您正在调用: activity参考上的startActivityForResult ,它与希望在其上调用onActivityResultCustomDialog 我不记得曾经在不是前台的活动实例startActivityForResult用过startActivityForResult -我不确定它是否会起作用。 我建议您更改: activity.startActivityForResultstartActivityForResult

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

之所以没有调用onActivityResult()的原因是因为当您为结果启动活动时即调用了onActivityResult(),即startActivityForResult(...),然后在启动的活动返回或结束时调用了onActivityResult()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM