Android:清除返回栈

362

在Android中,我有一些活动,假设它们是A,B,C。

在A中,我使用以下代码打开B:

Intent intent = new Intent(this, B.class);
startActivity(intent);
在B中,我使用以下代码来打开C:
Intent intent = new Intent(this, C.class);
startActivity(intent);

当用户在C中点击按钮时,我希望返回A并清除后退栈(关闭B和C)。因此,当用户使用后退按钮时,B和C将不会出现。我一直在尝试以下操作:

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);

但是当我回到活动A时,如果我使用后退按钮,B和C仍然会出现。我该如何避免这种情况?

39个回答

3

Intent.FLAG_ACTIVITY_CLEAR_TOP 在这种情况下无法使用。请使用 (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)

更多详细信息,请查看此文档


2
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

2

logout.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

logout.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

注销。添加标志以清除任务并启动新任务。

2

对我来说,添加Intent.FLAG_ACTIVITY_CLEAR_TASK解决了问题。


Intent i = new Intent(SettingsActivity.this, StartPage.class);
                i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(i);
finish();

1
你可以使用此示例从 Activity C 调用你的 Activity AIntent loout = new Intent(context, LoginActivity.class); loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); context.startActivity(loout);

1

在此之后,按返回按钮将不会产生任何活动:

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | 
Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finishAffinity();
finish();

0
在意图中添加“无历史记录标志”。
在活动B中,按以下方式启动活动C >>>>>>>>
Intent intent = new Intent(this, C.class);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent);
finish();

0

使用 setFlags() 方法来清除后台打开的所有活动并启动 yourActvity

Intent intent = new Intent(getApplicationContext(), yourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

0

在清单中

android:launchMode="singleTask"

并且

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

0

将此代码添加到您的B活动C活动中任意一个即可。

android:noHistory="true"

或者覆盖onBackPressed函数,使用return避免返回键按下。

@Override
public void onBackPressed() {
   return;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接