为了账号安全,请及时绑定邮箱和手机立即绑定

OnActivityResult 没有被调用

OnActivityResult 没有被调用

墨色风雨 2021-12-10 15:44:07
在活动 A 中,我想打开一个对话框 (CustomDialog)。在 CustomDialog 中,它有一个用于打开相机的按钮。但是onActivityResult在我从图库中选择图像后没有被调用。没有toast正在显示。活动Aprivate 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{              // ...            }我按照这个http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

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

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

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

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

您有 2 个修复选项:

1)替换activity.startActivityForResultCustomDialog.this.startActivityForResult

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


查看完整回答
反对 回复 2021-12-10
?
森林海

TA贡献2011条经验 获得超2个赞

您正在调用:startActivityForResulton activityreference 这与CustomDialog您期望onActivityResult被调用的不一样。我不记得曾经调用过startActivityForResult非前台的活动实例 - 我不确定它是否会起作用。我建议你改变:activity.startActivityForResultstartActivityForResult

顺便提一句。在你onActivityResult你打了 super.onActivityResult(requestCode, resultCode, data);两次电话。这是不正确的。


查看完整回答
反对 回复 2021-12-10
?
HUWWW

TA贡献1874条经验 获得超12个赞

未调用 onActivityResult() 的原因是因为当您为结果启动活动时调用 onActivityResult(),即 startActivityForResult(...) 然后当启动的活动返回或完成时调用 onActivityResult()


查看完整回答
反对 回复 2021-12-10
  • 3 回答
  • 0 关注
  • 196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信