1. ホーム
  2. android

[解決済み] アンドロイド バックスタックをクリアする

2022-02-03 10:01:35

質問

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に戻り、バックスタックをクリアしたい(BとCの両方を閉じる)。そこで、ユーザーが戻るボタンを使用すると、BとCが表示されなくなるので、次のことを試しています。

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);

しかし、アクティビティAに戻ったときに戻るボタンを使うと、BとCが表示されたままになっています。

解決方法は?

を追加してみてください。 FLAG_ACTIVITY_NEW_TASK のドキュメントで説明されているように FLAG_ACTIVITY_CLEAR_TOP :

この起動モードは、次のように使うこともできます。 との併用が効果的です。 FLAG_ACTIVITY_NEW_TASK: を使用する場合。 タスクのルート・アクティビティを開始すると、そのタスクの 現在実行中のすべての そのタスクのインスタンスを をフォアグラウンドにした後、そのフォアグラウンドをクリアする。 ルート状態です。これは特に便利です。 を起動するときなど アクティビティを通知 マネージャーを使用します。

というわけで、起動するためのコード A となります。

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent);
CurrentActivity.this.finish(); // if the activity running has it's own context


// view.getContext().finish() for fragments etc.