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

标签 java android android-intent start-activity

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

我在争论哪种方式更好或更“正确”。我已经用两种方式对其进行了编码,并且两种方式都有效。

我编写代码的第一种方法是检查额外 Intent 的存在:

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)setResult(MainActivity.RESULT_OK_SEARCH, intent)

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为了代码清晰。

关于java - StartActivityForResult - 检查是否存在额外的 Intent 或使用自定义结果代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27992053/

相关文章:

java - 使用 java Kafka 客户端的测试中出现间歇性异常

java - 获取excel中的列数

android - 你如何在Android中返回以下嵌套JSON数组的内容?

java - 如何正确设置带有 Fragments 的 RecyclerView 作为 child

java - 将 onClick 监听器添加到 gridView 项目(根据位置启动独特的 Intent )

java - java中复杂的逻辑运算如何解析?

java - 如何在 Android 设备上将 WAV 编码为 mp3

android - 我需要将数据从 Sqlite 数据库发送到服务器

java - 琐碎的 : Get confirmation of email sent in android

android - 如果互联网连接是错误的,它应该等待连接