web-dev-qa-db-ja.com

Android:スタックに保存せずにアクティビティを開く

メインとリストの2つのアクティビティがあります。

メインからリストを開くことができます。リストからメインを開くことができます。

Listを開くたびにnotが 'history'に保存されるようにします。だから、メインから押し戻すcannotリストに戻る。

出来ますか?

87
realtebo

リストのActivityを開始するとき、 Intent フラグを次のように設定します。

Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);

FLAG_ACTIVITY_NO_HISTORY フラグは、新しいActivityが履歴スタックに追加されないようにします。

注意:@Samが指摘しているように、代わりにi.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);を使用できます。機能的な違いはありません。

145
Eric

マニフェストファイルに以下を追加します。

Android:noHistory="true" 

スタックに残したくないアクティビティに。

86
Marcin S.

新しいタスクをクリアして使用します。これは私の場合、他のオプションが機能しなかったときに機能しました。

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

履歴スタック全体をクリアし、Androidで新しいアクティビティを開始します

27
Kalel Wade

別のアクティビティを開いた直後にアクティビティでfinish()を呼び出すと、終了したアクティビティがスタックから削除されるようです。

例えば:

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
19
dac2009

私の場合、FLAG_ACTIVITY_NO_HISTORYは機能しませんでした。 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASKも単独では機能しませんでした。

ただし、FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASKは一緒に機能しました。

Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
4
Fred

Kotlinでこれを行う方法を追加したかっただけです。

val i = Intent(this, LogInActivity::class.Java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
2
Devin B

遅い答えですが、他の答えに深みを加えます。すべては、そのアクティビティから開始された他のアクティビティで何をしたいのかによって決まります

オプション1-この1つのアクティビティだけに、呼び出しアクティビティの履歴がありません

それからちょうど:

Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

オプション2-その特定のアクティビティから開始されたすべてのアクティビティには履歴がありません

次に、呼び出しアクティビティのマニフェストを追加します。

Android:noHistory="true" 

ただし、新しいアクティビティの履歴を保持する場合は、フラグを手動で削除する必要があります。

Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);

他の答えが明らかになることを願っています:)

1
Miku
1
VinceFR

アクティビティが既に実行されている場合は、FLAG_ACTIVITY_CLEAR_TOPを試してください。

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
0
live-love