Android - 清除导航回栈
Posted
技术标签:
【中文标题】Android - 清除导航回栈【英文标题】:Android - Clearing Navigation Backstack 【发布时间】:2015-06-26 02:06:34 【问题描述】:我有 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 开始不应该有任何导航历史记录?
【问题讨论】:
【参考方案1】:我不确定这些方法是否适合您。第一种方法是从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 活动(MainActivity),然后您可以再次按下 BACK 按钮以退出该活动。
来自文档:
如果在传递给
Context.startActivity()
的 Intent 中设置,此标志将导致将新启动的任务放置在当前主活动任务(如果有的话)之上。也就是说,即使这不是他们看到的最后一个活动,从任务中按回总是会让用户回到家中。这只能与FLAG_ACTIVITY_NEW_TASK
结合使用。
第二种方法是,在清单中的活动中设置android:noHistory="true"
。将此属性应用于 page_1 到 page_4。但是这种方法有两个缺点。首先,您的活动完全没有回栈。第二,您使用此属性设置的活动会在您按下 HOME 按钮或接到来电时被销毁。我没找到这个话题,请CMIIW。
【讨论】:
【参考方案2】:对于所有其他活动,例如 page_3、page_2、page_1,
使用 FLAG_ACTIVITY_NO_HISTORY(如果设置,新活动不会保存在历史堆栈中。):
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
【讨论】:
【参考方案3】:尝试设置 Intent.FLAG_ACTIVITY_NO_HISTORY 和 Intent.FLAG_ACTIVITY_TASK_ON_HOME
来自文档 Intent.FLAG_ACTIVITY_NO_HISTORY
如果设置,新活动不会保存在历史堆栈中。立刻 用户离开它,活动就完成了。这可能 也可以使用 noHistory 属性设置。
Intent.FLAG_ACTIVITY_TASK_ON_HOME
如果在传递给的 Intent 中设置 Context.startActivity(),这个标志会导致一个新的启动任务 放置在当前家庭活动任务之上(如果有 一)。也就是说,从任务中按回总是会返回用户 回家,即使那不是他们看到的最后一次活动。这只能 与 FLAG_ACTIVITY_NEW_TASK 结合使用。
【讨论】:
以上是关于Android - 清除导航回栈的主要内容,如果未能解决你的问题,请参考以下文章