mwr*_*zam 6 android back-stack
我想在我的Android应用程序中修改后台堆栈:
现在,这是流程:
A - > B - > C - > D - > E - > F.
我希望能够修改后台堆栈,这样当用户进入活动F时,D和E将从堆栈中删除.因此,如果用户击中背部,则流量为F - > C.
此外,从F,用户能够进入活动B,这也应该擦除C,D,E和F.
我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但是我想在触发活动时从堆栈中删除一些项目.
感谢任何帮助,非常感谢.
您可以使用intent.FLAG_ACTIVITY_CLEAR_TOP从F到C 的标志构建一个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)
Run Code Online (Sandbox Code Playgroud)
请参阅此答案,该答案还涉及确保在导航回来时不会重新启动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,则此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);
}
Run Code Online (Sandbox Code Playgroud)
代码示例源:https://stackoverflow.com/a/9398171/1003511
| 归档时间: |
|
| 查看次数: |
3376 次 |
| 最近记录: |