活动结束时resultCode的默认值是什么?

6
这可能是一个基本问题,但我希望能够得到一些明确的解答。 我想做的事情: 1)使用requestCode启动一个活动,并在onActivityResult中处理两个操作,一个使用RESULT_OK,另一个使用RESULT_CANCELLED。我明确地说明了每一个操作。
问题是,即使我只使用返回按钮关闭活动而没有设置任何结果,后台堆栈中的Activity仍会接收到RESULT_CANCELLED。
通过查看源代码,我发现RESULT_CANCELLED是结果代码的默认值,并且结果代码始终被发送回去。

enter image description here

enter image description here

我是否正确理解并且这种情况一直发生?或者是我的应用程序有问题?

来源:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/Activity.java


1
你必须在activity中调用 "setResult" 方法才能获得非默认值: http://developer.android.com/reference/android/app/Activity.html#setResult(int) - Buddy
2个回答

7

当你的启动Activity正在重新启动时,在调用onResume()方法之前,此Activity的onActivityResult(..)方法会被调用。详见Activity文档

默认的resultCode是RESULT_CANCELLED。

必须在已启动的Activity中显式调用setResult(int)来更改resultCode的值。

这就是为什么在onActivityResult方法中检查resultCode == RESULT_OK很重要。因为即使你没有调用startActivityForResult,onActivityResult也可能会被调用。

这可能会令人困惑,但这是默认行为。

  @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == YOUR_REQUEST) {
        // Make sure the request was successful
        if (resultCode == RESULT_OK) {
            // so some work
        }
    }
}

2

您必须始终通过setResult()方法提供结果代码


我同意这是要使用的方法。但有时我不需要/不想设置结果。在这种情况下,我观察到即使我没有设置resultCode,我仍然会得到REQUEST_CANCELLED。 - Nitesh Mudireddy
REQUEST_CANCELLED 是默认选项。如果您使用 startActivityForResult() 方法启动一个活动,则 Android 期望您将结果返回给调用活动。 - Varun Kumar
如果在startActivityForResult()中找不到适合您的应用程序的任何预定义结果,则可以创建自己的结果代码,有关详细信息,请参见以下链接:http://developer.android.com/reference/android/app/Activity.html。 - Varun Kumar
在上面的链接中,转到“启动活动和获取结果”部分。您将在那里找到创建自己的结果代码的方法。 - Varun Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接