Android:requestCode 和 resultCode

Posted

技术标签:

【中文标题】Android:requestCode 和 resultCode【英文标题】:Android: requestCode and resultCode 【发布时间】:2011-10-22 14:12:12 【问题描述】:

我想知道我是否正确理解了 requestCode 和 resultCode 的概念?基本上,我有一个与活动关联的任意整数(requestCode)。例如,在Notepad tutorial 中,我们有

private static final int ACTIVITY_CREATE=0;
private static final int ACTIVITY_EDIT=1;

然后我们使用 startActivityforResult(intent, requestCode) 来启动一个活动,例如“创建笔记”活动。我们在那个活动中做一些事情并返回一个结果代码。

在父活动中,我们使用 onActivityResult(requestCode, resultCode, intent) 检测 resultCode。然后我们可以使用 requestCode 查看正在返回的活动,使用 resultCode 查看该活动的结果,以及使用意图的“附加”来获取返回的数据。


内置的resultCodes有什么特别之处吗,比如RESULT_CANCELED? documentation on the developer site 似乎暗示内置结果只是整数。

在我看来,这可能会变得非常混乱?例如,如果我有 10 个可能的活动要启动,那么我必须有一个 giant onActivityResult 函数来检查正在返回的活动,不是吗?

【问题讨论】:

【参考方案1】:

内置的 resultCodes 有什么特别之处吗,比如 RESULT_CANCELED?开发者网站上的文档似乎 建议内置结果只是整数。

是的。这些代码是“标准”响应。例如,如果您启动的活动返回RESULT_CANCELED(特别是操作系统活动或相机等标准应用程序),则表示该活动已取消。这些标准结果应根据文档进行解释。事实上,您的 Activity 应该使用这些标准结果(以便其他应用开发者可以更轻松地启动您的 Activity),除非有充分的理由不这样做。

在我看来,这可能会变得非常混乱?例如,如果我 有 10 个可能的活动要启动,那么我必须有一个巨人 onActivityResult 函数来检查正在返回的活动, 我不会吗?

是的。使用 switch 语句来处理这些。

【讨论】:

如果您必须使用两个以上的标准结果代码,请以Activity.RESULT_FIRST_USER 开始您的第一个自定义结果代码,即static final int MY_RESULT = Activity.RESULT_FIRST_USER,然后是static final int MY_OTHER_RESULT = MY_RESULT + 1【参考方案2】:

整数没有什么特别之处——这些常量只是一个约定。你的 onActivityResult 可以是一个单独的 switch 语句,将结果分派给方法来处理它们......不需要它是巨大的。当然,您应该使用符号常量,就像您看起来一样。

【讨论】:

以上是关于Android:requestCode 和 resultCode的主要内容,如果未能解决你的问题,请参考以下文章

如何在android报警时从待处理的意图中获取requestCode

android,,onActivityResult的作用是啥啊,requestCode, resultCode是啥意思啊?

android减少摄像头捕获图像的文件大小小于500 kb

片段中的Android onActivityResult

一旦在我的代码中触发警报,有没有办法让 requestCode 脱离待处理的意图?

Android中Fragment怎样刷新UI