我在启动 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_CATEGORY
和 RESULT_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/