我想修改我的Android应用程序中的后栈,如下所示:
现在,流程如下:
A -> B -> C -> D -> E -> F
我希望能够修改后台堆栈,这样当用户转到活动F时,D和E就会从堆栈中擦除。因此,如果用户击中背部,则流是F -> C。
此外,用户可以从F转到活动B,这应该也会删除C、D、E和F。
我已经看到了一些关于能够清除堆栈或删除顶部项的信息,但我想在触发活动时从堆栈中删除一些项。
感谢您的帮助,非常感谢。
发布于 2012-07-07 01:35:55
您可以使用从F到C的标志intent.FLAG_ACTIVITY_CLEAR_TOP构建一个intent,然后您必须使用intent调用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要做的是返回到堆栈中activity C的最新实例,然后清除它上面的所有内容。但是,这可能会导致重新创建活动。如果您希望确保它与活动的实例相同,也可以使用FLAG_ACTIVITY_SINGLE_TOP。从文档中:
在上面的示例中,当前正在运行的activity B实例将在其onNewIntent()方法中接收您在此处启动的新意图,或者使用新的意图完成并重新启动它自己。如果它已将其启动模式声明为"multiple“(默认值),并且您没有以相同的目的设置FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式,或者如果设置了FLAG_ACTIVITY_SINGLE_TOP,则此意图将被传递到当前实例的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);
}发布于 2012-07-07 01:14:56
您需要的是android:excludeFromRecents="true",它必须添加到清单文件的活动标签中。它会停止所有进入堆栈的活动,这些活动在清单中的活动标记中有此标记。
示例代码
<activity
android:name="com.xx.xx.ActivityName"
android:excludeFromRecents="true"
</activity>并确保您在那些您不想在活动堆栈上的活动中调用finish()(在启动另一个活动之后)方法。
https://stackoverflow.com/questions/11366700
复制相似问题