在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仍然会显示出来。我该如何避免这种情况?
这个问题困扰了我很长一段时间。最后我是这样解决的:
在片段中,使用:
Intent intent = new Intent(view.getContext(), A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
在Activity中,使用(再添加一个intent标志intent。FLAG_ACTIVITY_CLEAR_TASK相对于fragment):
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
我尝试了所有的解决方案,但没有一个单独对我有效。
我的解决方案是:
在android manifest中使用[android:launchMode=" SingleTop "]将活动A声明为SingleTop。
现在,在从任何地方启动A时添加以下标志。它将清空堆栈。
Intent in = new Intent(mContext, A.class);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK );
startActivity(in);
finish();