我有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
开始的活动中
答案 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
。