java - Android - 清除导航后退栈

标签 java android back-stack android-navigation

我有 4 页。

来自 page_1 > page_2 > page_3 > page_4。

一旦用户到达 page_3 并单击按钮,它就会导航到 page_4。单击按钮后,我想清除所有导航历史记录,以便当用户返回 page_4 时,应用程序退出而不是返回 page_3。

我试过:

    Intent intent = new Intent(this, page_4.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    finish();

但是没有任何反应。我仍然可以返回到 page_3、page_2 等。我该如何做到这一点,以便当用户单击 page_3 上的按钮时,他会转到 page_4,而 page_4 不应该有任何导航历史记录?

最佳答案

我不确定这些方法是否适合您。第一种方法是在从 page_3 转到 page_4 时添加 FLAG_ACTIVITY_TASK_ON_HOME:

Intent intent = new Intent(this, page_4.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);

因此,一旦您在 page_4 中按 BACK 按钮,它会首先将您定向到 HOME Activity (MainActivity),然后您可以再次按 BACK 按钮从该 Activity 中退出应用。

来自文档:

If set in an Intent passed to Context.startActivity(), this flag will cause a newly launching task to be placed on top of the current home activity task (if there is one). That is, pressing back from the task will always return the user to home even if that was not the last activity they saw. This can only be used in conjunction with FLAG_ACTIVITY_NEW_TASK.

第二种方法是,在 list 中的 Activity 中设置 android:noHistory="true"。将此属性应用于 page_1 到 page_4。但是这种方法有两个缺点。首先,您的 Activity 完全没有返回堆栈。其次,一旦您按下主页按钮或接到来电,您使用此属性设置的 Activity 就会被销毁。我从来没有找到这个主题,所以请 CMIIW。

关于java - Android - 清除导航后退栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29729409/

相关文章:

java - Android:在主菜单上显示高分

java - 如何修复java中的NoClassDefFoundError

java - handler.postDelayed 不工作(android eclipse)

android - 如何通过 Android/Kotlin App 上的 Koin 注入(inject)在 BaseActivity 中初始化/注入(inject)通用 ViewModel

java - 带有子 fragment 的 fragment backstack

android - 支持库从 23.1.1 升级到 25.1.0 后,popBackStack() 行为有所不同

java - 将drawOval圆转换为x,y坐标

java - 将 ScrollPane 添加到 BoxLayout

java - 不兼容的类型 : <anonymous TextWatcher> cannot be converted to Context

android - 如何防止回到之前的 Activity ?