在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并清除back堆栈(关闭B和C)。所以当用户使用后退按钮B和C不会出现时,我一直在尝试以下方法:

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

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


当前回答

我在开始新的意图后调用activity_name.this.finish(),它为我工作。

I tried "FLAG_ACTIVITY_CLEAR_TOP" and "FLAG_ACTIVITY_NEW_TASK"

但这对我没用……我不建议使用这个解决方案,但如果设置标志不适合你,你可以试试这个..但我仍然建议不要使用它

其他回答

我发现这里的答案有点误导,因为原始问题中的代码似乎对我很好?

如果A是根活动,那么只有使用FLAG_ACTIVITY_CLEAR_TOP从B或C启动它才会从后台堆栈中删除B和C。

在意图中添加NO历史标志。

在活动B中,启动活动C,如下所示>>>>>>

Intent intent = new Intent(this, C.class);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(intent);
finish();

使用此代码启动一个新的活动,并关闭或销毁所有其他活动堆栈或回栈。

Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Use finishAffinity() to clear all backstack with existing one.

Suppose, Activities A, B and C are in stack, and finishAffinity(); is called in Activity C, 

    - Activity B will be finished / removing from stack.
    - Activity A will be finished / removing from stack.
    - Activity C will finished / removing from stack.

意图。FLAG_ACTIVITY_CLEAR_TOP在这种情况下将不起作用。请使用(意图。FLAG_ACTIVITY_NEW_TASK

欲了解更多细节,请查看此文档。