您好,我想问一下是否可以等待 2 个不同的结果与StartActivityForResult()
.我试图完成以下几点:
我有一个列表视图,当我单击某个项目时,我会启动另一个活动。我有 2 个按钮。其中之一是保存列表项名称的更改,另一种是删除单击的项目。我不确定如何检测我按下了哪些按钮。
是的。REQUEST_ID的第二个参数用于告诉您正在请求表单的请求。
单击按钮 1 时,您调用
startActivityForResult(intent, REQUEST_1)
当按钮 2 单击时,您调用
startActivityForResult(intent, REQUEST_2)
在回调中,您将其作为第一个参数:
onActivityResult(requestCode: Int...)
如果请求代码 == REQUEST_1,则它来自按钮 1。
解决方案:
首先,从startActivityForResult(your_intent, 1);
开始您的活动
其次,在您的下一个活动中(您有 2 个按钮(:
在保存按钮的点击侦听器中,将结果代码传递为"1",如下所示:
setResult(1);
finish();
在删除按钮的单击侦听器中,将结果代码传递为"2",如下所示:
setResult(2);
finish();
最后,onActivityResult()
您之前的活动/片段:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == 1) {
....
(Save Button Pressed)
....
}
else if (requestCode == 1 && resultCode == 2) {
....
(Delete Button Pressed)
....
}
}
就是这样。我自己项目的工作示例。
为了更清楚起见,我将第一个activity
(带有列表的那个(称为ListActivity
,并将新activity
(带有按钮的那个(称为ButtonActivity
。
若要检测按下的按钮ButtonActivity
向类添加一个实现,如下所示:
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener
然后实现方法onClick(View v)
,像这样:
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.your_save_button_id: {
Intent data = new Intent();
data.putExtra("item_to_save", item);
setResult(CommonStatusCodes.SUCCESS, data);
finish();
break;
}
case R.id.your_delete_button_id: {
Intent data = new Intent();
data.putExtra("item_to_delete", item);
setResult(CommonStatusCodes.SUCCESS, data);
finish();
break;
}
default: {
break;
}
}
}
在您的ListActivity
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == "request_code_for_button_activity") {
if (resultCode == CommonStatusCodes.SUCCESS) {
if (data != null) {
if (data.getStringExtra("item_to_delete") != null) {
//DELETE YOUR ITEM HERE
} else if (data.getStringExtra("item_to_save") != null) {
//SAVE YOUR ITEM HERE
}
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}