StartActivityForResult - 检查是否存在额外的意图或使用自定义结果代码?

StartActivityForResult - check for existence of intent extra or use custom result code?

我在启动 SearchActivity 的 MainActivity 中有一个搜索按钮。在 SearchActivity 中,用户可以从列出的预定义类别之一中进行选择,也可以输入搜索查询。 SearchActivity 将 return 不同的额外内容,具体取决于用户搜索的方式。在 MainActivity 中运行的代码将取决于 returned.

我正在争论哪种方式更好或更多 "correct"。我已经用两种方式对其进行了编码,并且它可以以任何一种方式工作。

我编码的第一种方法是检查是否存在额外的意图:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == GET_SEARCH_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            if (data.getExtras().containsKey("extra1")) {
                extra1 = data.getStringExtra("extra1");
            }
            if (data.getExtras().containsKey("extra2")) {
                extra2 = data.getStringExtra("extra2");
            }
        }
        // plus rest of code for checking for RESULT_CANCELED
    }
}

我编码的另一种方法是使用自定义结果代码。结果代码 RESULT_OK_CATEGORYRESULT_OK_SEARCH 是 MainActivity 中的 public 静态变量,因此可以从 SearchActivity 访问它们,并通过 setResult(MainActivity.RESULT_OK_CATEGORY, intent) 或 [=15 作为结果代码发回=]分别。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == GET_SEARCH_REQUEST_CODE) {
        if (resultCode == RESULT_OK_CATEGORY) {
            extra1 = data.getStringExtra("extra1");
        } else if (resultCode == RESULT_OK_SEARCH) {
            extra2 = data.getStringExtra("extra2");
        }
        // plus rest of code for checking for RESULT_CANCELED
    }
}

哪种方式更好,为什么?检查额外的存在,或检查自定义结果代码?

您应该使用 resultCode,因为它完全在您的控制之下。您可能会丢失 Intent 的附加值中设置的值,如 this question 中所示(Ajay 在评论中引用)。

请注意,如果您使用许多自定义结果代码,为了代码清晰,recommended to use a switch statement