Android活动历史记录部分跟踪和清除

问题描述 投票:1回答:2

想象一下这个活动历史堆栈:

A> B> C> D> E.

方案1:

如果用户在E上然后点击后退按钮,则应导航到D> C> B> A.

方案2:

如果用户在E上,然后点击自定义按钮“显示B”,则应清除E> D> C.这与Finish()类似。

如果X> Y,如果我们在Y上设置完成,则会显示X.类似如果我在E上录制显示B,则应从堆栈中清除E> D> C.

我需要实现这两种方案。

(用场景编辑^^^^)

如果用户正在进行E活动并且想要移动B.如果B在历史堆栈中,我们可以清除C> D> E,以便用户可以在没有startActivity(B)的情况下导航到B.和A应该是历史。

如果堆栈中有活动,那么它应该从历史加载,如果不是startActivity(B)。

如果我使用FLAG_ACTIVITY_CLEAR_TOP / FLAG_ACTIVITY_NEW_TASK,它将清除完整历史记录并开始新活动。

我想清楚部分历史。

有可能实现吗?如果是这样,该怎么办呢?

android android-activity android-navigation
2个回答
1
投票

这都非常标准。不要使用任何特殊的启动模式。通常情况下,按BACK将完成当前的Activity并让您回到上一个。

对于这种情况:

如果用户在E上,然后点击自定义按钮“显示B”,则应清除E> D> C.这与Finish()类似。

E,回到现有的B实例,这样做:

Intent intent = new Intent(this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

这将完成E,D和C并返回到现有的B实例。

标志FLAG_ACTIVITY_CLEAR_TOP告诉Android清除当前Activity和目标Activity之间的所有活动。如果未指定FLAG_ACTIVITY_SINGLE_TOP,则目标Activity的现有实例也将完成,并将创建一个新实例。如果确实指定了FLAG_ACTIVITY_SINGLE_TOP,则目标Activity的现有实例将不会完成,并且不会创建新实例。


-1
投票

你可以使用这个来实现

android:launchMode="singleTask"

在您的清单文件中。有关更多信息,请参阅此文档https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242

© www.soinside.com 2019 - 2024. All rights reserved.