在我的应用程序中有 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/