0

如果这听起来很愚蠢和微不足道,我很抱歉,但我坚持了很长时间。

我有 5 个活动 A、B、C、D、E。链条像这样 A->B(移动到 C 后完成)->C->D->E。由于 C,D 是相互依赖的,所以我不想松开 C,D 的任何实例,直到我一起完成它们。我想在 E 中执行此操作,这意味着我想从 E 完成 C、D、E 并移动到 A完成所有活动,然后打开 A 的新实例如果有人已经为此类问题提供了简单的解决方案,请提供解决方案。我尝试了很多东西,最接近的是当我将C的launchMode设置为“singleTask”并将D的launchMode设置为“singleInstance”并在按下后退按钮时使用intent移动到C,这样我就可以在没有完成的情况下来回移动任何活动,无论是否创建新实例对 E 都无关紧要,因此将其保持为“标准”。然后我使用意图打开 A 并添加了标志“FLAG_ACTIVITY_CLEAR_TOP”,还尝试使用 startActivityFor 结果关闭 D,因为它是一个“singleInstance”活动。

现在的问题之一是我无法理解正在创建的结构,但我认为它是这样的

Task 1 -- [A->C] (Since B is finished when C is opened)
Task 2 -- [D] (since singleInstance)
Task 3 -- [E]

现在我必须从 E 转到 A 的新实例并关闭其他所有内容。由于所有活动都具有相同的亲和力,我尝试使用 finishAffinity() 但它也没有锻炼。

另一个问题是,当您在 E 中设置结果时,不会调用 D 中的 onActivityResult 方法(根据 stackoverflow 中的一个答案,我认为这是因为 D 是单实例),但是当我按下后退按钮时,它是从 A 调用的A 或者我们可以说何时从 A 调用 finish() (我不知道为什么会发生这种情况)。所以,现在当我按下后退按钮时会出现不同类型的问题。

4

1 回答 1

0

您可以使用片段来完成您的任务。创建一个函数来替换片段并使用布尔变量添加和清除返回堆栈条目。

于 2016-02-25T13:40:21.527 回答