OnActivityResult 没有被调用

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

              // ...

            }

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


墨色风雨
浏览 200回答 3
3回答

潇潇雨雨

当您在活动 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.startActivityForResult为CustomDialog.this.startActivityForResult2) 将您的onActivityResult代码从 CustomDialog移动到活动 A

森林海

您正在调用:startActivityForResulton activityreference 这与CustomDialog您期望onActivityResult被调用的不一样。我不记得曾经调用过startActivityForResult非前台的活动实例 - 我不确定它是否会起作用。我建议你改变:activity.startActivityForResult到startActivityForResult顺便提一句。在你onActivityResult你打了 super.onActivityResult(requestCode, resultCode, data);两次电话。这是不正确的。

HUWWW

未调用 onActivityResult() 的原因是因为当您为结果启动活动时调用 onActivityResult(),即 startActivityForResult(...) 然后当启动的活动返回或完成时调用 onActivityResult()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java