1. ホーム
  2. android

[解決済み] Androidで履歴スタックをすべて消去し、新しいアクティビティを開始する

2022-03-15 16:59:58

質問

スタック上でアクティビティを開始し、その前の履歴をすべてクリアすることは可能ですか?

状況

A->B->C または B->C のいずれかのアクティビティスタックがあります(画面 A はユーザーのトークンを選択しますが、多くのユーザーは単一のトークンを持っているだけです)。

画面Cでは、ユーザーが かもしれません そのため、アプリケーションは、画面Aがすでにスタックにあるかどうかに関係なく、画面Aに移動させたいと考えています。私のアプリケーションでは、画面Aはスタック上の唯一のアイテムであるべきです。

備考

他にも似たような質問がたくさんありますが、この質問に正確に答えているものは見つかっていません。私は getParent().finish() - を使用すると、常にヌルポインタの例外が発生します。 FLAG_ACTIVITY_CLEAR_TOP は、アクティビティがすでにスタック上にある場合にのみ動作します。

解決方法は?

APIレベル11では、このために新しいIntent Flagが追加されました。 Intent.FLAG_ACTIVITY_CLEAR_TASK

一応、これを使ってください。

ジャワ

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


コトリン

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK


API lvl <= 10については、残念ながら、まだきれいな解決策は見つかっていません。 その DontHackAndroidLikeThis"解決法 はまさに純粋なハッカー行為です。そんなことしちゃダメですよ :)

編集してください。 の通りです。 ベン・ピアソン のコメントにより、API <=10 では インテンションコンパット クラスがあります。また IntentCompat.FLAG_ACTIVITY_CLEAR_TASK フラグでタスクをクリアします。そのため、APIレベル11以前にも対応することができます。