web-dev-qa-db-ja.com

各アクティビティのインスタンスを1つだけにする方法はありますか?

私のアプリケーションでは、ユーザーがアプリケーションを使用している間に開かれるさまざまなアクティビティに、ユーザーがかなり「入れ子」になることがわかります。

例えば:

  1. メインメニュー
  2. オブジェクトリスト
  3. オブジェクトの詳細
  4. オブジェクト編集
  5. オブジェクトの詳細
  6. オブジェクトの子の詳細
  7. オブジェクトの子編集
  8. オブジェクトの子の詳細

今、ユーザーが押し返すと、「オブジェクトの子の詳細」を2回通過する必要があり(同じオブジェクト、編集すると詳細ページに戻ります)、「親オブジェクトの詳細」でも同じことが起こります。

スタックで既に開いているアクティビティを再利用して、最前面に並べ替える方法はありますか?私が見た唯一の方法は、launcher属性を持つアクティビティです。私はsingleTasksingleTopを見たと信じています。

これら2つの属性singleTasksingleTopを使用することになっている場合、どのように使用するのですか?それらをアプリケーションに含めようとしても、違いはありませんでした。 startActivityを使用してインテントを起動するときにフラグを設定する必要もありますか?

36
Cody

マニフェストアクティビティプロパティでは、このパラメーターを指定できますAndroid:launchMode="singleInstance"

ここで詳細をお読みください http://developer.Android.com/guide/topics/manifest/activity-element.html

42
ud_an

Android:launchMode = "singleTask"を使用することは、既に実行されているアクティビティを再作成しないため、おそらく最良のアプローチです。 AndroidManifest.xmlのアクティビティに追加するだけで、設定は完了です。

<activity
    Android:name=".MyActivity"
    Android:label="@string/app_name"
    Android:launchMode="singleTask"
    >
    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
 </activity>

役に立つかもしれない別の質問は次のとおりです: Android singleTaskまたはsingleInstance起動モード?

26
Balu

これがあなたの旗です! http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_REORDER_TO_FRONT

_intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
_

「addFlags」に注意してください。また、新しいインテントが配信されると、このアクティビティでonCreateが呼び出されないことに注意してください。 onNewIntent()を介して配信されます。

これにより、アクティビティの単一インスタンスが実行されていることは保証されません。それを確認するには、これを確認してください: http://developer.Android.com/guide/topics/manifest/activity-element.html#lmode

26

これは私のために働いた。

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

このActivityのインスタンスが既に存在する場合は、最前面に移動します。インスタンスが存在しない場合、新しいインスタンスが作成されます。

8
Anirban

はい、これらのアクティビティのインスタンスを1つだけ作成するように要求できますが、一般的にはお勧めしません。単に履歴に関心がある場合は、 Intent.FLAG_ACTIVITY_CLEAR_TOP をご覧ください。

7
kabuko

意図フラグを追加

Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);StartActivity(srcActivity.Java, DesiredActivity.class);

次に、onPause() DesiredActivityで

finish()を追加します。これで作業が完了しました。

1
P-RAD
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);

わたしにはできる :)

0
शु-Bham