我有一个活动列表A - B -C -D - E等等,例如最终活动是K.当我按下BACK按钮时,我希望在堆栈中清除所有这些活动。我能怎么做 ?事实上,我骑过
onBackPress(){
moveTaskToBack(true);
finish();
}
但仅删除当前活动并退出应用程序。然后,我回来申请,它恢复K之前的活动。我希望它从重新打开应用程序时开始。我认为这里的原因是因为堆栈中的活动列表仍然存储,所以我想在单击BACK按钮时清除所有堆栈。有什么建议 ?非常感谢你 !
答案 0 :(得分:6)
有一个名为finishAffinity()的方法用于完成所有活动。
public void onBackPressed(){
super.onBackPressed();
this.finishAffinity();}
答案 1 :(得分:3)
您需要使用FLAG_ACTIVITY_CLEAR_TOP
onBackPressed
来调用您的活动
@Override
public void onBackPressed()
{
Intent it = new Intent(YouCurrentActivity.this, YourFinalActivity.class);
it.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(it);
finish();
}
希望它有帮助!
答案 2 :(得分:1)
使用清单中的noHistory
标记或在用户导航时自行完成每个活动。
startActivity(myIntent);
finish();
另一个解决方案,也许是最好的解决方案,如果你有多个重叠Activities
:只使用一个Activity
并处理Fragments
中的内容。这样,当用户点击后退按钮时,您可以控制您想要显示的内容。
答案 3 :(得分:0)
在 API级别11或更高级别中,在Intent上使用FLAG_ACTIVITY_CLEAR_TASK
和FLAG_ACTIVITY_NEW_TASK
标志清除所有活动堆栈。
在onBackPressed()
方法
> This launch mode can also be used to
与此同时效果良好 FLAG_ACTIVITY_NEW_TASK:如果习惯的话 它启动任务的根活动 会带来任何正在运行的 该任务的实例 前景,然后清除它 根状态。这特别有用, 例如,启动时 来自通知的活动 管理器。
因此,启动B
的代码将是:
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish(); // call this to finish the current activity