[英]android:noHistory=“true” behavior but still catch OnActivityResult?
[英]Android: OnActivityResult behavior
我在应用程序中使用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
返回到“活动”,但我将REQUEST_CODE_1
返回到“活动”。 显然, else
块的setResult
没有按预期执行。
希望我的问题清楚。 有人可以解释一下。
谢谢。
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);
}
从我的角度看,您假设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()。getIntegerExtra(“ request_code”)从Activity2获取它
在这种情况下,您需要将对象与另一个不带等号(或包装)的文字进行比较
同样,Activity2不需要知道setResult的整数,因为它必须是RESULT_OK,RESULT_CANCELED和RESULT_NONE之一。 onActivityResult将返回(requestCode,resultCode,data),其中requestCode将是您刚完成startActivityForResult的整数,而resultCode将是Activity2中在完成之前设置的那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.