将 activity 结果传回 grandparent activity(不是 parent)

Passing activity result back to grandparent activity (not parent)

我的情况是我有 3 个活动。

  1. 结果活动
  2. SimpleSearchActivity
  3. 复杂搜索活动

流程如下:用户可以选择从将启动 SimpleSearchActivity 的 ResultsActivity 进行搜索。用户可以从那里执行简单的搜索。结果传回结果 activity。

但是,用户可以从 SimpleSearchActivity 中选择进行复杂搜索,这将完成 SimpleSearchActivity 并启动 ComplexSearchActivity。我想从那里将​​结果传递回 ResultsActivity。我不确定如何执行此操作,因为第 3 个 activity 不是从第一个 activity 启动的,而是第二个

我考虑过的选项:

  1. 在复杂搜索情况下,返回到 ResultsActivity 并从那里启动 ComplexSearchActivity。不确定我是否真的想要这个,因为我不希望 SimpleSearch 关闭返回结果然后立即启动 Complex。我担心这会在启动 ComplexSearchActivity 之前 'flash' ResultsActivity。

  2. 在复杂搜索的情况下,从 SimpleSearch 使用 startActivityForResult(...) 启动 ComplexSearch,在复杂完成时简单搜索可以获取结果,然后将其传递回结果 activity .我不确定这种链接是否有效。即使它确实如此,我担心在复杂完成时 SimpleSearchActivity 将 'flash' 只是为了传回结果。

  3. 将搜索结果存储在某处的静态变量中,并在 ResultsActivity 启动时检查可能已由任一搜索设置的静态变量 activity。呸!

  4. 我也想过只进行一次搜索 activity 并在某些字段上进行 show/hide(简单与复杂)。但是,我将简单搜索作为对话框启动 activity(在平板电脑的情况下),将复杂搜索作为全屏启动 activity。所以我不能真正使用相同的搜索 activity.

想法?以前有人试过这样的东西吗?

有几种方法可以实现此目的:

选项 1:您可以选择 在启动 ComplexSearchActivity 时关闭 SimpleSearchActivity。相反,让 ComplexSearchActivity 将其结果发送回 SimpleSearchActivity,然后让 SimpleSearchActivity 将该结果传递给 ResultsActivity

更新:至少根据我的经验,这不会 UI "flash";它应该看起来是无缝的。

选项 2:使用 FLAG_ACTIVITY_FORWARD_RESULT,正是为了这个目的而存在的。

您是否考虑过将数据层抽象为在所有活动之间共享的方法,而不是仅使用某些 activity 来保存数据?