ユーザーがクリックしlogout button
てもIntentFlag Intent.FLAG_ACTIVITY_NO_HISTORY
、運が悪かったのに、アクティビティ履歴スタックをクリアしようとしています。下記の私のシナリオを見てください。
1)ログイン画面(通話終了)
2)最初の画面(終了を呼び出さない)
3)2番目の画面(終了を呼び出さない)
4)3番目の画面(終了を呼び出さない)
5)ログアウト画面(ログイン画面が開き、終了します)
以下のコードを使用して私の目標mを達成するには、
ログイン画面
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,FirstActivity.class);
startActivity(intent);
finish();
}
});
ログインバックイベント
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getIntent().getBooleanExtra("EXIT", false)) {
this.finish();
}else{
this.finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
最初の画面
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});
2番目の画面
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);
startActivity(intent);
}
});
3番目の画面
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(ThirdActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("EXIT", true);
startActivity(intent);
finish();
}
});
問題は、ログアウトをクリックするとログインアクティビティに移動し、戻るボタンをクリックすると2番目のアクティビティに移動することです。
なぜそれがアクティビティを終了しないのか、second activity
そしてスタックを維持している場合はなぜそれが行くのかfirst activity
、私が戻ってクリックしたときに代わりに2番目のアクティビティに行く必要があります、私login screen
がどのようなものを逃しているのかわかりません。
更新しました
ログイン画面からインテントを呼び出しているときに削除すると、すべて正常に機能finish()
しますが、スタックログイン画面を維持したくありません。
あなたの提案は適切です。