E -> F
在 F 中,如果我选择一个项目,我需要导航到 C。
从 C 如果我按回键,我需要像 C 一样返回> B -> A -> 退出应用程序
怎么做?
如何从后堆栈中删除前n个activities
?
我建议使用以下算法:每个活动都有一个唯一的标签(例如"A"、"B"等(
创建包含活动列表的 AcitivityManager 类(对堆栈 - 每对包含唯一的标记和活动(
每个新活动都将通过从"onCreate"方法调用它来添加到此管理器中(您可以使用单例或发送本地通知(。通过这种方式,你会得到 A -> B -> C -> D -> E -> F。
当用户按下"C"按钮时,管理器将通过以下机制弹出上述所有活动:
从"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 等于空,正如预期的那样。
您可以在启动活动后调用此方法finish()
,当您导航到 C 活动时,您可以在其中调用重写的方法onBackPressed()
并启动活动 B,并且还可以从 B 调用方法onBackPressed()
并启动活动 A。
简短回答:您无权访问活动堆栈。它们完全由Android内部管理。
但
当向后按某个活动时,您可以在意向中添加一个额外的内容,指示来自哪个活动,并采取相应的行动。
我认为你应该使用
android:noHistory="true"
对于清单中的所有先前活动,在示例活动中为 D 和 E。
所以它们不会在历史堆栈上,你可以直接从
活动 F->C->B->A->退出