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