Android - 清除导航Backstack

时间:2015-04-19 11:43:50

标签: java android back-stack android-navigation

我有4页。

来自page_1>第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 个答案:

答案 0 :(得分:2)

我不确定这些方法是否适合您。第一种方法是从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。

答案 1 :(得分:0)

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

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

intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

答案 2 :(得分:0)

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