范围问题-意图超出预期,并从2个不同的功能开始活动

时间:2018-11-25 19:57:06

标签: java android

我有2位听众,其中1位需要获得额外的意图,这是一个图像uri,而另一位需要从此开始其他活动。 但是我认为,由于它们的作用范围不同,因此实际上并没有为启动其他活动的意图提供额外的费用。

这是代码:

        private Intent intent = new Intent(this, OtherActivity.class);
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final Button button= findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    intent = new Intent(v.getContext(), OtherActivity.class);
                    startActivity(intent);
                }
            });


        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
                Thing.ActivityResult result = Thing.getActivityResult(data);
                if (resultCode == RESULT_OK) {
                    Uri resultUri = result.getUri();
                    intent.putExtra("imageUri", resultUri.toString());    
                }
           }
   } 

我希望我在onActivityResult中添加的内容会在单击按钮时发送到onClickListener开始的活动中

2 个答案:

答案 0 :(得分:4)

我的建议是使用一个字段来存储图像URI:

1-在您的课程中定义一个String变量

String imageURI = "";

2-在您的onActivityResult中:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
            Thing.ActivityResult result = Thing.getActivityResult(data);
            if (resultCode == RESULT_OK) {
                Uri resultUri = result.getUri();
                imageURI = resultUri.toString();    
            }
       }

3-在您的onClickListener中:

        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            intent = new Intent(v.getContext(), OtherActivity.class);
                intent.putExtra("imageUri", imageURI);    
                startActivity(intent);
            }
        });

答案 1 :(得分:0)

onClick中,您正在重新初始化Intent,因此您可能设置的所有额外内容都会丢失。如果您删除startActivity上方的行,就可以了。

我不会那样想。我不会将Intent作为类变量,而是将图像URI。因此,每当发生点击事件时,我都会检查是否已设置图像URI,创建新的Intent,然后启动Activity。

您的代码将如下所示:

private String intentImage = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final Button button = findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (intentImage != null) {
                Intent intent = new Intent(this, OtherActivity.class);
                intent.putExtra("imageUri", intentImage); 

                startActivity(intent);
            }
        });
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
        Thing.ActivityResult result = Thing.getActivityResult(data);

        if (resultCode == RESULT_OK) {
            Uri resultUri = result.getUri();
            intentImage = resultUri.toString();    
        }
    }
}

还要记住,您的代码中没有startActivityForResult。因此,如果这是您的全部活动,则永远不会调用onActivityResult