Android – 清除导航Backstack

我有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活动(MainActivity),然后您可以再次按BACK按钮从此活动中退出应用程序。

来自文档:

如果在传递给Context.startActivity()的Intent中设置,则此标志将使新启动的任务置于当前主活动任务(如果有)之上。 也就是说,从任务中退回将始终将用户返回到家,即使这不是他们看到的最后一个活动。 这只能与FLAG_ACTIVITY_NEW_TASK一起使用。

第二种方法是,在清单中的活动中设置android:noHistory="true" 。 将此属性应用于page_1直到page_4。 但这种方法有两个缺点。 首先,您的活动完全没有后台堆栈。 第二,使用此属性设置的活动会在您按HOME按钮或接到来电时被销毁。 我从来没有找到这个话题,所以请CMIIW。

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

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

 intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

尝试设置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一起使用。