我的导航类似 A - > B - > C - > D - > E - > ˚F
在 F 中,如果我选择一个项目,我需要导航到 C 。
来自 C 如果我回复,我需要回到 C - > B - > A - >退出应用
怎么做?
如何从后堆栈中删除以前的 n activities
答案 0 :(得分:1)
我建议使用以下算法: 每项活动都有一个独特的标签(例如,' A',' B',...)
创建包含活动列表的AcitivityManager类(堆栈对 - 每对保持唯一标记及其活动)
每个新活动都会通过在' onCreate'中调用来添加到此管理器中。方法(您可以使用单例或发送本地通知)。 这样你就得到A - > B - > C - > D - > E - > F。
当用户按下' C'按钮,管理器将通过以下机制弹出所有上述活动:
来自' onClick'按钮,拨打' popToTag'带有以下参数的方法:it标记和目标标记。
在本地存储目标标记,然后调用' popActivity'方法
' popActivity'方法将测试堆栈的窥视,直到目标标记到达。
每次' popActivity'方法会调用'完成'方法直到获取目标标记。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
}
下一阶段是再次打电话给backStack'来自' onDestroy'方法
public void onDestroy(){
super.onDestroy();
AcitivityManager.getInstance().popActivity();
}
答案 1 :(得分:0)
您可以在启动活动后调用此方法finish()
,当您导航到C活动时,您可以调用重写方法onBackPressed()
并启动活动B,并从B调用方法{{1并启动活动A.
答案 2 :(得分:0)
简短回答:您无权访问活动堆栈。它们完全由Android内部管理。
BUT
当在活动上按下后,您可以在意图中添加一个额外内容,指示哪个活动来自哪个活动,并采取相应行动。
答案 3 :(得分:0)
我认为你应该使用
android:noHistory="true"
适用于清单中的所有先前活动,在您的示例活动中,例如D和E.
所以他们不会在历史堆栈上,你可以直接从
回来活动 F-> C-> B-> A->退出