活动结果没被记住?

时间:2011-06-07 10:51:26

标签: android

我有以下情况(请注意,活动 A launchMode="singleTop"):

  1. 活动 A 在活动 B 上调用startActivityForResult();
  2. 活动 B C 上调用startActivity(),之后setResult(RESULT_OK)finish();此时, A 中的onActivityResult()调用。
  3. 活动 C 使用startActivity()FLAG_ACTIVITY_CLEAR_TOP A 上调用finish();
  4. 这是我的问题发生的地方。此时,使用右侧onActivityResult()调用 A requestCode,而RESULT_OK调用resultCode作为RESULT_OK。我期待收到RESULT_OK,因为我已将其设置为 B (已为结果启动)。

    为什么我会收到{{1}}以外的其他内容?

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发送新意图而不是返回其结果?