繁体   English   中英

如何在 onActivityResult() 中制定意图并启动活动?

[英]How to make an intent and launch an activity in onActivityResult()?

我正在尝试在用户选择照片后启动一项活动。 我试图这样做:

        uploadImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent selectImageIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                selectImageIntent.setType("image/*");

                startActivityForResult(selectImageIntent, 1);

                Intent goToActivityIntent = new Intent(view.getContext(), SendPhotoChangeActivity.class);
                goToActivityIntent.putExtra("email", email);
                goToActivityIntent.putExtra("donorEmail", donorEmail);
                goToActivityIntent.putExtra("orderId", orderId);
                goToActivityIntent.putExtra("uriString", uriString);

                view.getContext().startActivity(goToActivityIntent);
            }
        });

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == Activity.RESULT_OK && data != null) {
            uriString = data.getData().toString();
        }
    }

但我意识到,使用此代码,启动 Activity (SendPhotoChangeActivity) 的代码在用户选择图像之前执行,导致应用程序崩溃,因为 uriString 变量为空。

我尝试简单地将代码复制/粘贴到 onActivityResult() 中,但是视图变量(在 view.getContext() 中)当然在 onActivityResult() 中无法识别。

我想简单地用 onActivityResult() 中的 getApplicationContext() 替换 view.getContext()。 这是正确的做法吗? 如果没有,请告诉我如何在 onActivityResult() 中开始活动。

如果您在活动中,那么您可以将this用作Context

 Intent goToActivityIntent = new Intent(this, SendPhotoChangeActivity.class);

如果您在 Fragment 中,则可以通过调用getContext()获取 Context

Intent goToActivityIntent = new Intent(getContext(), SendPhotoChangeActivity.class);

并按照您的尝试在onActivityResult()使用该代码。

为选择像 REQUEST_CODE_TAKE_PICTURE 这样的图片的行为设置一个整数代码,这样你就知道已经发生了,这在 Kotlin 中可以正常工作,我认为这也适用于 java:

if (requestCode == REQUEST_CODE_TAKE_PICTURE && resultCode == Activity.RESULT_OK) {

  Intent goToActivityIntent = new Intent(view.getContext(),SendPhotoChangeActivity.class);
            goToActivityIntent.putExtra("email", email);
            goToActivityIntent.putExtra("donorEmail", donorEmail);
            goToActivityIntent.putExtra("orderId", orderId);
            goToActivityIntent.putExtra("uriString", uriString);

            view.getContext().startActivity(goToActivityIntent);
        if (data == null) {
            //Display an error
            println("error accuered at onActivityResult ")
            return
        }

你有没有试过这个更简单的:

uploadImageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent selectImageIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                selectImageIntent.setType("image/*");

                startActivityForResult(selectImageIntent, 1);
            }
        });

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == Activity.RESULT_OK && data != null) {
            uriString = data.getData().toString();
             Intent goToActivityIntent = new Intent(view.getContext(), SendPhotoChangeActivity.class);
                goToActivityIntent.putExtra("email", email);
                goToActivityIntent.putExtra("donorEmail", donorEmail);
                goToActivityIntent.putExtra("orderId", orderId);
                goToActivityIntent.putExtra("uriString", uriString);

                startActivity(goToActivityIntent);
        }
    }

打电话就行

startActivity(goToActivityIntent);

调用活动。

这假设您是从您的活动或片段中调用它的。 如果这不符合您的要求,请告诉我。 还有其他方法可以实现这一点。

暂无
暂无

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

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