想象一下这个活动历史记录堆栈:
A> B> C> D> E
场景1:
如果用户使用的是 E ,则在点击后退按钮时,应导航到 D> C> B> A 。
场景2:
如果用户在 E 上,然后点击自定义按钮“显示B” ,则应清除 E> D> C 。类似于 Finish()。
像X> Y,如果我们在Y上设置 finish (完成),则将显示X。类似如果我在 E 上显示B ,则应从堆栈中清除 E> D> C 。
我需要同时实现这两种情况。
(使用场景编辑^^^^)
如果用户正在进行 E 活动,并且想移动 B 。如果 B 在历史记录堆栈中,我们可以清除C> D> E ,以便用户可以导航到 B 而无需startActivity(B)。并且A应该在历史中。
如果活动在堆栈中可用,那么如果没有startActivity(B),则应从历史记录中加载。
如果我使用FLAG_ACTIVITY_CLEAR_TOP / FLAG_ACTIVITY_NEW_TASK,它将清除完整的历史记录并开始新的活动。
我想清除部分历史记录。
能否实现?如果是这样,请怎么做?
答案 0 :(得分: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 :(得分:-1)
您可以使用
android:launchMode="singleTask"
在清单文件中。有关更多信息,请参阅此文档https://android.jlelse.eu/android-activity-launch-mode-e0df1aa72242