android - 如何清除BackStack?

标签 android back-stack

在我的应用程序中有 4 个 Activity ,分别是 A、B、C、D

从 Activity “A”开始,它是一个启动屏幕

Intent intent = null;
if(userLogin()) {
  intent = new Intent(A.this, B.class);
  startActivity(intent);
  finish();
}
else {
  intent = new Intent(A.this, c.class);
  startActivity(intent);
  finish();
}

“A”和“B”都调用同一个 Activity “D”,它是登录或注销屏幕 来自 Activity “D”

String calledActivity = getIntent().getStringExtra("CALLED_ACTIVITY");

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
  if(keyCode == KeyEvent.KEYCODE_BACK) {
    if(calledActivity.equal("C") && userLogin()) {
      Intent intent = new Intent(D.this, B.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      finish();
    }
    else if(calledActivity.equal("B") && !userLogin()) {
      Intent intent = new Intent(D.this, C.class);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(intent);
      finish();
    }
    else 
      finish();
    return true;
  }
  return false;
}

如果用户未登录,在调用“D”之前,堆栈为“C”

如果 usr 未登录,调用“D”后,堆栈为“C”->“D”

如果用户登录,从 Activity “D”按回后,堆栈为“C”->“B”

但本来我想,堆栈是“B”

请帮我解决这个问题,谢谢

最佳答案

使用以下标志开始 B:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);

这将清除 B 之前的所有 View ,并且堆栈将只包含 B。

尽管 FLAG_ACTIVITY_CLEAR_TASK 可从 API 11 获取。

关于android - 如何清除BackStack?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21524746/

相关文章:

android - 为什么构建类型与产品 flavor 不同?

android - 如何在 Gradle 中查找依赖冲突

java - iOS 和 Android 中的 PBEWithMD5AndDES

java - Android:变量在while循环中的值不正确

android - 当 Activity 进入堆栈时如何释放内存?

android - 使用 addToBackStack() 时 fragment 表现异常

android - 以编程方式返回到 backstack 中的上一个 fragment

android - 我在使用单选按钮时遇到问题

android - 共享时 "FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET"的作用是什么?

android - 使用 Backstack 时 TabLayout ViewPager 未加载