2011-07-03 46 views
7

我有一个期望用户选择项目的活动,但用户可以选择单击后退按钮而不选择项目。这个“项目选择”活动是从startActivityForResult()开始的。我是否需要显式地将setResult设置为RESULT_CANCELED?

我在想两件事。首先,当实际选择项目时是否仅仅设置了结果(RESULT_OK),即,如果我没有明确设置结果,我能否依赖结果不被设置为RESULT_OK?第二,如果这还不足以依赖(未初始化的)结果,可以多次调用setResult(),第一次将结果“初始化”为RESULT_CANCELED,然后调用SetResult(RESULT_OK),然后调用SetResult(RESULT_OK)用户选择一个项目之后并在完成活动之前?

回答

9

documentation

如果一个子活动因故失败(如崩溃),该 父活动将得到的结果与代码 RESULT_CANCELED

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

+0

谢谢我在文档中看到,这是什么提示的问题。我所描述的情况并不是该活动“失败”。从Android API文档中不清楚,RESULT_CANCELED是默认值是一个安全的假设,也不清楚是否可以多次调用setResult。 –

+0

文档中另一行onActivityResult方法:“如果活动明确返回该结果,没有返回任何结果或在其操作期间崩溃,resultCode将为RESULT_CANCELED。”所以如果你不返回任何结果,在用户退出活动之前用后退按钮 - 结果是RESULT_CANCELLED。 – Dirol

+0

关于不止一次调用setResult - 它在文档中确实没有定义。所以我不会依赖这个。即使它可能适用于当前的API,也不能保证它将来可以使用。 – Dirol

1

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

在被覆盖的OnActivityResult中,如我所述,如果结果代码被取消。

相关问题