Android:OnActivityResult 行为
Android: OnActivityResult behavior
我在我的应用程序中使用 startActivityForResult
。但我对它的行为有一些 doubts/queries 的看法。
场景: 在我的应用程序中。我有两个活动,比如 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
是一个字符串变量。
问题: 从 Activity1,我执行第一个代码,即使用 REQUEST_CODE_1
,在我的 Activity2 中,else 块被执行。在这种情况下,我希望 REQUEST_CODE_2
回到 Activity,但相反,我得到 REQUEST_CODE_1
回到 Activity。显然,else
块的 setResult
没有按预期执行。
我希望我的问题很清楚。
有人可以解释一下吗。
谢谢。
据我所知,您认为 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 中设置的那个。
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);
}
我在我的应用程序中使用 startActivityForResult
。但我对它的行为有一些 doubts/queries 的看法。
场景: 在我的应用程序中。我有两个活动,比如 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
是一个字符串变量。
问题: 从 Activity1,我执行第一个代码,即使用 REQUEST_CODE_1
,在我的 Activity2 中,else 块被执行。在这种情况下,我希望 REQUEST_CODE_2
回到 Activity,但相反,我得到 REQUEST_CODE_1
回到 Activity。显然,else
块的 setResult
没有按预期执行。
我希望我的问题很清楚。 有人可以解释一下吗。
谢谢。
据我所知,您认为 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 中设置的那个。
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);
}