2012-07-06 67 views
6

后退堆栈的我想修改后堆在我的Android应用程序,例如:修改Android中

眼下,这里是流量:

甲 - >乙 - “ç - > D - > E - > F

我希望能够修改回栈,以便当用户进入活动F时,D和E从堆栈中删除。所以如果用户碰到后面,流程是F - > C.

另外,从F开始,用户能够进入活动B,这也应该擦除C,D,E和F.

我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但是当触发一个活动时,我想从堆栈中删除一些项目。

任何帮助表示赞赏,非常感谢。

回答

9

您可以创建一个意图,标志为intent.FLAG_ACTIVITY_CLEAR_TOP,从F到C.然后,您将必须以意图调用startActivity(),并触发它发生onBackPressed或类似事件。

Intent i = new Intent(this, C.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(i) 

看到这个答案,当你导航回到它也有保证是c不会重新启动交易:https://stackoverflow.com/a/11347608/1003511

什么FLAG_ACTIVITY_CLEAR_TOP会做的就是去回到最近的活动实例C在堆栈上,然后清除它上面的所有内容。但是,这可能会导致重新创建活动。如果您想确保它将是该活动的同一个实例,请使用FLAG_ACTIVITY_SINGLE_TOP。从文档:

活动B在上面的例子中当前运行的实例将 要么接受你是从这里开始,在其 onNewIntent()方法的新意图,或者是本身完成,与新 重新启动意图。如果它已宣布其启动模式为“多个”(默认为 ),并且您没有将FLAG_ACTIVITY_SINGLE_TOP设置为相同的 意图,则它将被完成并重新创建;对于其他所有启动 模式的FLAG_ACTIVITY_SINGLE_TOP,如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此Intent将被传送到当前实例的onNewIntent()中 。

编辑:这类似于你想要做什么的代码示例:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     Intent a = new Intent(this, C.class); 
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     startActivity(a); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

代码示例源:https://stackoverflow.com/a/9398171/1003511

+0

这很完美。非常感谢你的帮助。 – mwrazam 2012-07-07 04:39:43

2

你需要的是android:excludeFromRecents="true"必须添加到清单文件的Activity标签中。它会停止所有活动,将具有此标记的堆栈放入清单中的Activity标记中。

示例代码

<activity 
      android:name="com.xx.xx.ActivityName" 
      android:excludeFromRecents="true" 


     </activity> 

,并确保你叫finish()这些动作的方法,你不希望在活动堆栈(开始另一项活动后)。

+0

你好,这将使活动从历史当中ISN完全消失我想要什么。我希望活动仅在某些其他活动被解雇后消失。感谢您的帮助! – mwrazam 2012-07-07 04:40:38