我在我的应用程序中使用startActivityForResult
。但我对它的行为有一些疑问/疑问。
场景:在我的应用中。我有两个活动,比如Activity1和Activity2。我使用不同的请求代码从Activity1到Activity2调用startActivityForResult
两次。
final REQUEST_CODE_1 = 1;
final REQUEST_CODE_2 = 2;
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_1);
和
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_2);
我将数据恢复到onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
switch (requestCode) {
case REQUEST_CODE_1:
//some piece of code
break;
case REQUEST_CODE_2:
//some piece of code
break;
}
}
}
在我的Activity2中,我有一些基于它发送数据的条件 到Activity1。
myStr = scanner.getValue();
if(myStr.startsWith("5901")){
intent.putExtra("box",myStr);
setResult(REQUEST_CODE_1,intent);
}else{
intent.putExtra("item",myStr+"dCbA");
setResult(REQUEST_CODE_2,intent);
}
其中mystr
是一个String变量。
问题:从Activity1,我执行第一个代码,即REQUEST_CODE_1
,在我的Activity2中,执行else块。在这种情况下,我希望REQUEST_CODE_2
回到Activity,但我会将REQUEST_CODE_1
恢复为Activity。显然,setResult
块的else
没有按预期执行。
我希望我的问题很明确。 有人可以解释一下。
谢谢。
答案 0 :(得分:1)
setResult(int)必须始终提供结果代码,该结果代码可以是标准结果RESULT_CANCELED,RESULT_OK。您正在提供请求代码而不是RESULT_OK或RESULT_CANCELED。
试试这个
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, REQUEST_CODE_1);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
switch (requestCode) {
case REQUEST_CODE_1:
//check if resultCode is RESULT_OK or CANCELED
break;
case REQUEST_CODE_2:
//some piece of code
break;
}
}
}
if(myStr.startsWith("5901")){
setResult(RESULT_OK,intent);
}else{
setResult(RESLT_CANCELED,intent);
}
答案 1 :(得分:0)
从我看来,你认为myStr是从Activity1发送的request_code。
request_code不是参数的一部分,因此您需要将其添加到Intent。
Intent i = new Intent(this, Activity2.class);
i.putExtra("request_code", REQUEST_CODE_1);
startActivityForResult(i, REQUEST_CODE_1);
所以你可以使用getArguments()从Activity2中获取它.getIntegerExtra(“request_code”)
在这种情况下,你需要将对象与另一个没有equals(或包装器)的文字进行比较
此外,Activity2不需要知道setResult的整数,因为它需要是RESULT_OK,RESULT_CANCELED,RESULT_NONE之一。 onActivityResult将接收回(requestCode,resultCode,data),其中requestCode将完全是你执行startActivityForResult的整数,resultCode将是在完成之前在Activity2中设置的那个。