私のアプリケーションでは、ユーザーがアプリケーションを使用している間に開かれるさまざまなアクティビティに、ユーザーがかなり「入れ子」になることがわかります。
例えば:
今、ユーザーが押し返すと、「オブジェクトの子の詳細」を2回通過する必要があり(同じオブジェクト、編集すると詳細ページに戻ります)、「親オブジェクトの詳細」でも同じことが起こります。
スタックで既に開いているアクティビティを再利用して、最前面に並べ替える方法はありますか?私が見た唯一の方法は、launcher
属性を持つアクティビティです。私はsingleTask
とsingleTop
を見たと信じています。
これら2つの属性singleTask
とsingleTop
を使用することになっている場合、どのように使用するのですか?それらをアプリケーションに含めようとしても、違いはありませんでした。 startActivity
を使用してインテントを起動するときにフラグを設定する必要もありますか?
マニフェストアクティビティプロパティでは、このパラメーターを指定できますAndroid:launchMode="singleInstance"
ここで詳細をお読みください http://developer.Android.com/guide/topics/manifest/activity-element.html
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起動モード?
これがあなたの旗です! 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
これは私のために働いた。
Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
このActivityのインスタンスが既に存在する場合は、最前面に移動します。インスタンスが存在しない場合、新しいインスタンスが作成されます。
はい、これらのアクティビティのインスタンスを1つだけ作成するように要求できますが、一般的にはお勧めしません。単に履歴に関心がある場合は、 Intent.FLAG_ACTIVITY_CLEAR_TOP をご覧ください。
意図フラグを追加
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
StartActivity(srcActivity.Java, DesiredActivity.class);
次に、onPause()
DesiredActivityで
finish()
を追加します。これで作業が完了しました。
Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_NO_HISTORY);
わたしにはできる :)