Android从背面删除Activity

好的,所以我对如何处理此事感到困惑。 因此,我有了MainActivity,然后可以将一个Activity启动到DegreePlanActivity,然后可以将另一个Activity启动到EditDegreePlan。 我在AndroidManifest中将EditDegreePlan设置为noHistory。 问题是在他们保存EditDegreePlan之后,它将启动一个Activity到DegreePlan。 因此,如果用户按Back(返回),则必须按两次以再次进入MainActivity。 我想摆脱它,所以他们只需要按下一次即可。 我为如何做到这一点而感到困惑。

如果我将DegreePlanActivity设置为noHistory,则在EditDegreePlan中他们将无法按Back。

我尝试覆盖onBackPressed方法并启动MainActivity的意图。 然后的问题是,他们必须多次按Back才能退出应用程序。

我该怎么办?

Emrys90 asked 2019-10-09T02:44:15Z
8个解决方案
118 votes

FLAG_ACTIVITY_CLEAR_TOP清除您的“活动”堆栈,您可以使用以下代码:

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

请记住,此标志仅清除中间活动,例如,如果您在Back Stack中包含A,B,C,然后使用该标志从C活动转到D,则不会清除Back Stack,堆栈将为A,B,C,D,但是 如果使用此标志从“活动D”转到“活动A”,则B,C,D活动将从堆栈中弹出,而“后堆栈”中将只有A。

Arash GM answered 2019-10-09T02:44:42Z
10 votes

我建议您在启动EditDegreePlan-Activity时使用startActivityForResult(),而不是onActivityResult,如Android教程中所述。

然后在EditDegreePlan-Activity中调用

setResult(RESULT_OK);
finish();

如果您不希望从EditDegreePlan-Activity获得任何数据,则不必实施onActivityResult

Soana answered 2019-10-09T02:45:22Z
10 votes

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);
Kamal Bunkar answered 2019-10-09T02:45:47Z
6 votes

似乎,如果您根本不指定任何标志,则将获得所需的行为。 后退按钮将做正确的事情。 要从代码中关闭活动,请使用finish()方法,该活动的效果与用户按下“后退”按钮的效果相同。 因此,当您完成EditDegreePlan时,您将自动到达DegreePlan,而无需调用任何Intents

Henry answered 2019-10-09T02:46:14Z
5 votes

这是您的流程:

MainActivity-> DegreePlanActivty-> EditDegreePlan->学位计划-> MainActivity

在您的“ 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);
}
Vikalp Patel answered 2019-10-09T02:46:53Z
2 votes

使用它来清除堆栈:

 menuIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP);
Heena Arora answered 2019-10-09T02:47:18Z
2 votes

您可以在开始新活动之前致电完成。 这将卸载当前活动,因此当您在下一个活动上按后退按钮时,第一个活动将不再存在。

Intent i = new Intent(MainActivity.this, NextActivity.class);
finish();  
startActivity(i);
live-love answered 2019-10-09T02:47:46Z
0 votes

您可以按如下所示添加标志并启动Activity,请尝试以下代码

Intent i = new Intent(activity, Payment.class); i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(i);

Rachit Mishra answered 2019-10-09T02:48:19Z
translate from https://stackoverflow.com:/questions/14112219/android-remove-activity-from-back-stack