从后台堆栈中删除以前的“n”活动

时间:2016-02-01 12:25:04

标签: android android-activity navigation

我的导航类似 A - > B - > C - > D - > E - > ˚F

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

来自 C 如果我回复,我需要回到 C - > B - > A - >退出应用

怎么做?

如何从后堆栈中删除以前的 n activities

4 个答案:

答案 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();
}
  • 请注意,当用户按下后退按钮时,也会调用onDestroy以及AcitvityManager,但是targetTag等于null,正如预期的那样。

答案 1 :(得分:0)

您可以在启动活动后调用此方法finish(),当您导航到C活动时,您可以调用重写方法onBackPressed()并启动活动B,并从B调用方法{{1并启动活动A.

答案 2 :(得分:0)

简短回答:您无权访问活动堆栈。它们完全由Android内部管理。

BUT

当在活动上按下后,您可以在意图中添加一个额外内容,指示哪个活动来自哪个活动,并采取相应行动。

答案 3 :(得分:0)

我认为你应该使用

android:noHistory="true"

适用于清单中的所有先前活动,在您的示例活动中,例如D和E.

所以他们不会在历史堆栈上,你可以直接从

回来

活动 F-> C-> B-> A->退出