Android中的startActivityForResult(Intent,Requestcode)

时间:2013-09-27 06:45:00

标签: android android-intent

我相信我们将请求代码添加为参数,作为识别哪个子活动(从父级开始)返回结果的方法。

但我认为(可能是错误的)在任何时候,应用程序中只有一个活动可用...对吗?

那为什么我们需要第二个参数?

4 个答案:

答案 0 :(得分:3)

当我想要关闭许多已打开的活动时,我通常会使用“startActivityForResult(Intent,Requestcode)”。例如:

startActivityForResult(myIntent,0);

当你调用finish()时,它只会关闭当前活动,你会看到最后打开的活动 假设您打开了活动A,从A打开B然后是C,然后是D,让我们说在网络连接错误上你必须关闭C和D并返回活动B.你设置结果:

setResult(100);

在您要关闭的活动中(例如此处为C),您添加:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode==100){
        setResult(100);
        finish();
    }
};

所以在IOException中捕获你只需要设置结果100并完成活动

希望它会对你有所帮助:)。

答案 1 :(得分:1)

您有一个活动A.您可以通过请求代码 b1调用活动B.或者使用不同的请求代码c1调用活动C.因此,当您从B或C返回时,您知道请求代码。

在B中你做了一些事情然后回到A.有时候你决定在B中做的是'取消'并标记它,所以你将结果代码设置为CANCEL。其他时候你决定你所做的是一种“按下OK”,所以你用结果代码标记好了。然后回到A,根据这些结果做你需要做的事。

您可以使用相同的请求代码bu调用活动B和C,然后您将无法区分返回A。

答案 2 :(得分:1)

android developer basics中所述:

For- public void startActivityForResult (Intent intent, int requestCode)

  

整数参数是标识您的请求的“请求代码”。   当您收到结果Intent时,回调提供相同的结果   请求代码,以便您的应用程序可以正确识别结果和   确定如何处理它。

示例 -

您想要启动允许用户选择联系人的活动,然后使用请求代码,例如:

static final int PICK_CONTACT_REQUEST = 1;  // The request code
...
private void pickContact() {
    Intent pickContactIntent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts"));
    pickContactIntent.setType(Phone.CONTENT_TYPE); // Show user only contacts w/ phone numbers
    startActivityForResult(pickContactIntent, PICK_CONTACT_REQUEST);
}

因此,当被调用的活动将结果返回给调用者活动时,调用者活动将会 通过它将从被调用活动接收的请求代码来识别结果。

答案 3 :(得分:0)

在我看来,仅次于验证新活动是否成功完成。因此,您想知道,例如,如果登录在第二个活动中成功,您可以传递ERROR_CODE或SUCCESS_CODE。但是,您不喜欢第二个参数使用此方法:

void startActivity(Intent intent)

希望它有所帮助。