如何清除Back Stack?

时间:2014-02-03 10:23:44

标签: android back-stack

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

从活动“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”都调用相同的活动“D”,它是登录或注销屏幕 从活动“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”

如果我们没有登录则在呼叫“D”之后,堆栈是“C” - > “D”

如果用户登录,则从活动“D”返回后,堆栈为“C” - > “B”

但最初我想,堆栈是“B”

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

2 个答案:

答案 0 :(得分:2)

使用以下标志启动B:

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

这将清除B之前的所有视图,堆栈只包含B。

尽管可以从API 11获得FLAG_ACTIVITY_CLEAR_TASK。

答案 1 :(得分:2)

使用此代码启动新活动。并且所有堆栈都将被清除。

Intent intent = new Intent(getBaseContext(),Registration.class);                 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);                 startActivity(意向);