Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OnActivityResult未被调用_Java_Android_Android Gallery_Onactivityresult - Fatal编程技术网

Java OnActivityResult未被调用

Java OnActivityResult未被调用,java,android,android-gallery,onactivityresult,Java,Android,Android Gallery,Onactivityresult,在活动A中,我想打开一个对话框(CustomDialog)。在CustomDialog中,它有一个打开相机的按钮。但是在我从图库中选择了一张图像后,onActivityResult没有被调用。没有显示toast 活动A private void openDialog() { CustomDialog alert = new CustomDialog(); alert.showDialog(this); } 自定义对话框 public class Cust

在活动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);
    }
}

我遵循您正在调用的:
activity
参考上的
startActivityForResult
,它与您希望调用
onActivityResult
CustomDialog
不同。我不记得曾经在非前台的活动实例上调用过
startActivityForResult
——我不确定它是否会工作。我建议您将:
activity.startActivityForResult
更改为
startActivityForResult


顺便说一句,在您的
onActivityResult
中,您调用了
super.onActivityResult(请求代码、结果代码、数据)两次。这是不正确的。

您正在调用:
activity
上的
startActivityForResult
参考,它与您希望调用
onActivityResult
自定义对话框不同。我不记得曾经在非前台的活动实例上调用过
startActivityForResult
——我不确定它是否会工作。我建议您将:
activity.startActivityForResult
更改为
startActivityForResult


顺便说一句,在您的
onActivityResult
中,您调用了
super.onActivityResult(请求代码、结果代码、数据)两次。这是不正确的。

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

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

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

public void showDialog(活动){
这个。活动=活动;
…}

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

private void gallerycontent(){
...
activity.startActivityForResult(Intent.createChooser(Intent,“选择文件”),1);
}

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

您有两个修复选项:

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


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

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

public void showDialog(活动){
这个。活动=活动;
…}

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

private void gallerycontent(){
...
activity.startActivityForResult(Intent.createChooser(Intent,“选择文件”),1);
}

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

您有两个修复选项:

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


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

请参阅有关编写CustomDialog的方式的链接,以及有关正确使用activityForResult()的此链接。请参阅有关编写CustomDialog的方式的链接以及有关正确使用activityForResult()的此链接我的项目流程如下:从第一个活动-->活动A-->开始,然后单击活动A的按钮打开自定义对话框。接下来在对话框中选择图像-->在活动A中显示-->将所选图像返回到第一个活动。一切正常,但在此之后,当我单击firstActivity-->活动A-->然后再次返回firstActivity时,图像消失了。为什么会发生这种情况?如果没有看到活动A和firstActivity的代码,很难判断。如何存储图像?它只是在记忆中吗?当您返回时,您的活动可能已被破坏/重新创建?或者,在从活动A到第一个活动的第二次转换期间(当您没有通过对话框选择任何内容时),您可能返回空位图?我的代码不多。我可以将我的项目发送到github供您检查吗?当然,请将指向您的项目的链接发送给我。我的项目流程如下:从第一个活动-->活动A-->然后单击活动A的按钮以打开自定义对话框。接下来在对话框中选择图像-->在活动A中显示-->将所选图像返回到第一个活动。一切正常,但在此之后,当我单击firstActivity-->活动A-->然后再次返回firstActivity时,图像消失了。为什么会发生这种情况?如果没有看到活动A和firstActivity的代码,很难判断。如何存储图像?它只是在记忆中吗?当您返回时,您的活动可能已被破坏/重新创建?或者,在从活动A到第一个活动的第二次转换期间(当您没有通过对话框选择任何内容时),您可能返回空位图?我的代码不多。我可以将我的项目发送到github供您检查吗?当然可以,请将您项目的链接发送给我。