后退堆栈的我想修改后堆在我的Android应用程序,例如:修改Android中
眼下,这里是流量:
甲 - >乙 - “ç - > D - > E - > F
我希望能够修改回栈,以便当用户进入活动F时,D和E从堆栈中删除。所以如果用户碰到后面,流程是F - > C.
另外,从F开始,用户能够进入活动B,这也应该擦除C,D,E和F.
我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但是当触发一个活动时,我想从堆栈中删除一些项目。
任何帮助表示赞赏,非常感谢。
后退堆栈的我想修改后堆在我的Android应用程序,例如:修改Android中
眼下,这里是流量:
甲 - >乙 - “ç - > D - > E - > F
我希望能够修改回栈,以便当用户进入活动F时,D和E从堆栈中删除。所以如果用户碰到后面,流程是F - > C.
另外,从F开始,用户能够进入活动B,这也应该擦除C,D,E和F.
我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但是当触发一个活动时,我想从堆栈中删除一些项目。
任何帮助表示赞赏,非常感谢。
您可以创建一个意图,标志为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);
}
你需要的是android:excludeFromRecents="true"
必须添加到清单文件的Activity标签中。它会停止所有活动,将具有此标记的堆栈放入清单中的Activity标记中。
示例代码
<activity
android:name="com.xx.xx.ActivityName"
android:excludeFromRecents="true"
</activity>
,并确保你叫finish()
这些动作的方法,你不希望在活动堆栈(开始另一项活动后)。
你好,这将使活动从历史当中ISN完全消失我想要什么。我希望活动仅在某些其他活动被解雇后消失。感谢您的帮助! – mwrazam 2012-07-07 04:40:38
这很完美。非常感谢你的帮助。 – mwrazam 2012-07-07 04:39:43