【问题标题】:Do I need to explicitly setResult to RESULT_CANCELED?我需要将结果显式设置为 RESULT_CANCELED 吗?
【发布时间】:2016-04-27 04:31:01
【问题描述】:

我有一个期望用户选择项目的活动,但用户可以选择单击后退按钮而不选择项目。这个“项目选择”活动以 startActivityForResult() 开始。

我想知道两件事。首先,仅在实际选择项目时 setResult(RESULT_OK) 就足够了,即,如果我没有明确设置,我可以依赖结果不设置为 RESULT_OK 吗?

其次,如果这不足以依赖(未初始化的)结果,是否可以多次调用 setResult(),第一次将结果“初始化”为 RESULT_CANCELED,然后在之后调用 SetResult(RESULT_OK)用户在完成活动之前选择了一个项目?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    来自documentation

    如果子活动因任何原因(如崩溃)失败,则 父活动将收到带有代码的结果 RESULT_CANCELED.

    所以结果已经是RESULT_CANCELED,如果 您没有明确指定其他代码。当用户退出你的 应用程序通过“返回”按钮 - 您也会收到 RESULT_CANCELED

    【讨论】:

    • 谢谢,我在文档中看到了这一点,这就是提出问题的原因。我所描述的情况并不是活动“失败”。从 Android API 文档中并不清楚是否可以安全地假设 RESULT_CANCELED 是默认值,也不清楚是否可以多次调用 setResult。
    • 文档中的另一行,用于 onActivityResult 方法:“如果活动显式返回、未返回任何结果或在操作期间崩溃,则 resultCode 将为 RESULT_CANCELED。”。因此,如果您不返回任何结果,则在用户使用后退按钮退出活动之前 - 结果为 RESULT_CANCELLED。
    • 关于多次调用 setResult - 它在文档中确实未定义。所以我不会依赖它。即使它可能适用于当前的 API,也不能保证它会在未来起作用。
    【解决方案2】:

    您可以在每个Activity 上使用setResult(RESULT_CANCELED) 并调用finish()

    在被覆盖的OnActivityResult中,如果结果码被取消,按我说的做。

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 2017-03-18
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 2021-10-24
      相关资源
      最近更新 更多