繁体   English   中英

Android: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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM