从后退堆栈中删除以前的"n"个活动


我有像A -> B -> C -> D ->

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->退出

相关内容

  • 没有找到相关文章

最新更新