Android - 清除导航堆栈

3

我有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开始不应有任何导航历史记录?
3个回答

3

我不确定这些方法是否适用于您。第一种方法是在从页面3到页面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);

当您在页面4中按下“返回”按钮时,它会先将您定向到主页活动(MainActivity),然后您可以再次按下“返回”按钮从该活动退出应用程序。

根据文档:

如果设置在传递给Context.startActivity()的Intent中,则此标志将导致新启动的任务放置在当前主页活动任务的顶部(如果有一个)。也就是说,无论用户上次查看的是哪个活动,从该任务中按下“返回”始终会返回到主页。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。

第二种方法是,在清单文件中为页面1到页面4设置android:noHistory="true"。但是这种方法有两个缺点。首先,您的活动完全没有后退堆栈。其次,使用此属性设置的活动一旦按下HOME按钮或接听来电就会被销毁。我从未找到过这个话题,请指正。


0

对于其他所有活动,如page_3、page_2、page_1等,

请使用FLAG_ACTIVITY_NO_HISTORY(如果设置,则新活动不会保留在历史堆栈中):

intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

0

尝试设置 Intent.FLAG_ACTIVITY_NO_HISTORY 和 Intent.FLAG_ACTIVITY_TASK_ON_HOME

来自文档 Intent.FLAG_ACTIVITY_NO_HISTORY

如果设置了此标志,新的活动将不会保留在历史堆栈中。一旦用户从它导航到其他页面,该活动就会结束。这也可以使用 noHistory 属性进行设置。

Intent.FLAG_ACTIVITY_TASK_ON_HOME

如果在传递给Context.startActivity()的Intent中设置了此标志,那么新启动的任务将被放置在当前主页活动任务的顶部(如果有)。也就是说,即使这不是用户最后看到的活动,从任务中按返回键也始终会将用户返回到主页。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接