Android从后面堆栈移除活动

好吧,所以我有点不知所措。 所以我有MainActivity,并从那里一个活动可以启动DegreePlanActivity,从那里另一个活动可以启动到EditDegreePlan。 我在AndroidManifest中将EditDegreePlan设置为noHistory。 问题是在他们保存EditDegreePlan后,它启动一个Activity到DegreePlan。 所以,如果用户按下后退,他们必须按两次再次到达MainActivity。 我想摆脱这一点,所以他们只需要按一次。 我很困难如何做到这一点。

如果我将DegreePlanActivity设置为noHistory,那么在EditDegreePlan中,他们不能按回到它。

我试着重写onBackPressed方法并启动MainActivity的意图。 那么问题是,他们必须多次按下退出应用程序。

我该怎么办?

FLAG_ACTIVITY_CLEAR_TOP清除您的Activity堆栈,您可以使用代码:

Intent intent = new Intent(this, Activity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

请记住,此标志仅清除中间活动,例如,如果您的Back Stack有A,B,C,然后从C Activity移动到D,则此标志不会清除Back Stack ,堆栈将为A,B,C, D,但是如果你从这个标志从活动D转到活动A,那么B,C,D活动将从栈中popup,并且你将在后面的栈中有A。

我build议您在启动EditDegreePlan-Activity时使用startActivityForResult() ,而不是简单的startActivity() ,如Android教程中所述 。

然后在EditDegreePlan-Activity中调用

 setResult(RESULT_OK); finish(); 

如果您不希望从EditDegreePlan-Activity得到任何数据,那么您不一定必须实现onActivityResult

看来,如果你没有指定任何标志,你将会得到所需的行为。 后退button只是做正确的事情。 要从代码中closures一个活动,使用finish()方法可以获得与用户按下后退button相同的效果。 因此,当您完成EditDegreePlan时,您将自动到达DegreePlan,无需调用任何Intents

简单解决API> = 15到API 23用户活动名称的意图。

  Intent nextScreen = new Intent(currentActivity.this, MainActivity.class); nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(nextScreen); ActivityCompat.finishAffinity(currentActivity.this); 

这是你的stream程:

MainActivity – > DegreePlanActivty – > EditDegreePlan – > DegreePlan – > MainActivty

在“DegreePlan”中覆盖这些方法

 public void onBackPressed() { super.onBackPressed(); Intent goToMainActivity = new Intent(getApplicationContext(), MainActivity.class); goToMainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Will clear out your activity history stack till now startActivity(goToMainActivity); } 

用这个来清除堆栈:

  menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);