B -> C -> D -> E -> F 在 F 如果我选择一个项目,我需要导航到 C。 从 C 如果我返回按我需要返回 C -> B -> A -> Exit app 如-6ren">
gpt4 book ai didi

android - 从返回堆栈中删除之前的 "n" Activity

转载 作者:行者123 更新时间:2023-11-30 01:35:44 25 4
gpt4 key购买 nike

我有这样的导航 A -> B -> C -> D -> E -> F

F 如果我选择一个项目,我需要导航到 C

C 如果我返回按我需要返回 C -> B -> A -> Exit app

如何做到这一点?

如何从返回堆栈中删除之前的 n activities ??

最佳答案

我建议使用以下算法:每个 Activity 都有一个唯一的标签(例如“A”、“B”……)

创建包含 Activity 列表的 AcitivityManager 类(成对堆栈 - 每对包含其唯一标签和 Activity )

每个新 Activity 都将通过从“onCreate”方法调用它来添加到此管理器(您可以使用单例或发送本地通知)。通过这种方式,您将获得 A -> B -> C -> D -> E -> F。

当用户按下“C”按钮时,管理器将通过以下机制弹出所有上述 Activity :

从“onClick”按钮,使用以下参数调用“popToTag”方法:it 标记和目标标记。

将目标标签存储在本地,然后调用'popActivity'方法。

'popActivity' 方法将测试堆栈的窥视,直到目标标记到达。

每次“popActivity”方法都会调用“finish”方法,直到获取目标标签。

public void popToTag(String currentTag , String targetTag){
this.targetTag = targetTag;
if (!currentTag.equals(targetTag)){
popActivity();
}
}

public void popActivity(){
if (!stack.isEmpty()){
if (targetTag != null){
if (!stack.peek().pair.tag.equals(this.targetTag)){
Activity top = stack.top().pair.activity; //get the top activity
top.finish(); //pop the activity from Android 'back stack'
stack.pop(); //pop the top activity from the stack
}
}else{
stack.pop(); //pop the top activity from the stack
}
}
targetTag = null; //reset the targetTag
}

下一阶段是从“onDestroy”方法再次调用“backStack”

public void onDestroy(){
super.onDestroy();
AcitivityManager.getInstance().popActivity();
}
  • 请注意,当用户按下后退按钮时,也会调用 onDestroy 以及 AcitvityManager,但 targetTag 等于 null ,正如预期的那样。

关于android - 从返回堆栈中删除之前的 "n" Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com