我有以下情况(请注意,活动 A 有launchMode="singleTop"
):
startActivityForResult()
; startActivity()
,之后setResult(RESULT_OK)
和finish()
;此时, A 中的onActivityResult()
被非调用。startActivity()
和FLAG_ACTIVITY_CLEAR_TOP
在 A 上调用finish()
; 这是我的问题发生的地方。此时,使用右侧onActivityResult()
调用 A 的requestCode
,而RESULT_OK
调用resultCode
作为RESULT_OK
。我期待收到RESULT_OK
,因为我已将其设置为 B (已为结果启动)。
为什么我会收到{{1}}以外的其他内容?
答案 0 :(得分:1)
阅读本文档:
http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
如果设置,则启动活动 已经在当前运行了 任务,然后而不是发起一个新的 所有的活动的实例 除此之外的其他活动将是 关闭,这个意图将是 送到(现在在上面)老了 活动作为新的意图。
传递clear top flag将完成堆栈中的所有活动。因此,onActivityResult
中的内容可能是“通知”,表示您希望结果取消的活动。 (又名RESULT_CANCELED = 0x00)
<强>更新强>
当我使用startActivityForResult
时,在设置结果后,我总是完成我的活动并让来电者开始行动。
你做的事情不太常见:你设定结果,完成你的活动但你也开始另一个。我不知道在这种情况下是预期的行为。你不能改变活动之间的互动吗?
您可以尝试先调用finish()
,然后启动新活动(在活动B和C中执行此操作)。无论如何,我也不知道你这样做会发生什么。我建议您采用第一种方法(更改交互,这样您就不会返回结果并同时创建新活动)。
也许您可以链接两个startActivityForResult
或您的活动B可以向A发送新意图而不是返回其结果?