我想修改我的Android应用程序中的后台堆栈:
现在,这是流程:
A -> B -> C -> D -> E -> F
我希望能够修改返回堆栈,以便当用户进入活动 F、D 和 E 时从堆栈中删除。因此,如果用户击中背部,则流程为 F -> C。
此外,用户可以从 F 转到活动 B,这也应该删除 C、D、E 和 F。
我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但我想在触发活动时从堆栈中删除一些项目。
任何帮助表示赞赏,非常感谢。
我想修改我的Android应用程序中的后台堆栈:
现在,这是流程:
A -> B -> C -> D -> E -> F
我希望能够修改返回堆栈,以便当用户进入活动 F、D 和 E 时从堆栈中删除。因此,如果用户击中背部,则流程为 F -> C。
此外,用户可以从 F 转到活动 B,这也应该删除 C、D、E 和 F。
我已经看到了一些关于能够清除堆栈或删除顶部项目的信息,但我想在触发活动时从堆栈中删除一些项目。
任何帮助表示赞赏,非常感谢。
您可以使用从 F 到 C 的标志构建一个意图intent.FLAG_ACTIVITY_CLEAR_TOP
。然后您必须使用该意图调用 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() 方法中接收您在此处启动的新意图,或者自身完成并使用新意图重新启动。如果它已声明其启动模式为“multiple”(默认)并且您没有在同一意图中设置 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()
在您不想在活动堆栈上的那些活动中调用(在启动另一个活动之后)方法。