web-dev-qa-db-ja.com

アクティビティを前景(スタックの最上部)に移動する方法は?

Androidでは、アクティビティExampleActivityを定義しました。

アプリケーションを起動すると、このA-Activityのインスタンスが作成されました。たとえば、Aです。ユーザーがB-Activityの別のインスタンスAのボタンをクリックすると、Bが作成されました。これで、タスクスタックはB-Aになり、Bが最上部になります。次に、ユーザーはCアクティビティの別のインスタンスであるBのボタンをクリックし、Cが作成されました。これで、タスクスタックはC-B-Aになり、Cが最上部になります。

ここで、ユーザーがCのボタンをクリックすると、アプリケーションがAをフォアグラウンドに持ってくる、つまりAをタスクスタックA-C-Bの最上位にしたいです。

どうすればそれを実現するコードを書くことができますか?

77
user256239

これを試すことができます FLAG_ACTIVITY_REORDER_TO_FRONT (ドキュメントはあなたがしたいことを正確に説明しています)

96
Binh Tran

これを行うための最良の方法は、Androidホーム画面の使用-アプリランチャーと同じ意図を使用することでした。

例えば:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

このようにして、パッケージ内のユーザーが最後に使用したアクティビティはすべて前面に戻ります。これは、サービスのPendingIntentを使用してユーザーをアプリに戻すのに役立ちます。

57
greg7gkb

これを行う方法のコード例を次に示します。

Intent intent = getIntent(getApplicationContext(), A.class)

これにより、スタック上にアクティビティのインスタンスが1つだけ存在するようになります。

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}
24

FLAG_ACTIVITY_REORDER_TO_FRONT :Context.startActivity()に渡されたIntentで設定されている場合、このフラグは、既に実行されている場合、起動されたアクティビティをタスクの履歴スタックの先頭に移動します。

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
10
FunGapApp

Intentフラグの組み合わせでうまくいくと思います。特に、 - Intent.FLAG_ACTIVITY_CLEAR_TOP およびIntent.FLAG_ACTIVITY_NEW_TASK

startActvityを呼び出す前に、これらのフラグをインテントに追加してください。

4
Al.

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

注:ホームアクティビティの起動モードはsingle_taskである必要があります

2
sujith s

一般に、この方法のアクティビティ管理はお勧めできません。 The Stackで2段階下のアクティビティを再アクティブ化する際の問題は、このアクティビティが強制終了された可能性が高いことです。アクティビティの状態を記憶し、startActivity ()で起動することへの私のアドバイス

このページを見たことがあると思いますが、 このリンクは便利です

1
Segfault

通知をクリックしたときにスタックの一番上にアクティビティを表示したい場合は、FLAG_ACTIVITY_REORDER_TO_FRONTを機能させるために次の操作が必要になる場合があります。

このための解決策は、通知がトリガーするブロードキャストアクションをリッスンするブロードキャストレシーバーを作成することでした。だから基本的に:

  1. 通知は、起動するアクティビティの名前を追加してブロードキャストアクションをトリガーします。

  2. ブロードキャストレシーバーは、通知がクリックされたときにこれをキャッチし、FLAG_ACTIVITY_REORDER_TO_FRONTフラグを使用してそのアクティビティを起動するインテントを作成します

  3. アクティビティはアクティビティスタックの最上部に移動され、重複はありません。

0