私が持っているとしましょう
A->B->C->D->E
Android バックスタック内。次のいずれかに戻れるようにしたい:
A->B->C
A->B
A
どうすればこれを達成できますか?戻るボタンのクリックを強制しないことを願っています。
私が持っているとしましょう
A->B->C->D->E
Android バックスタック内。次のいずれかに戻れるようにしたい:
A->B->C
A->B
A
どうすればこれを達成できますか?戻るボタンのクリックを強制しないことを願っています。
Androidタスクとバック スタックの公式開発者ページの画像と情報を使用すると、アクティビティを起動する他のすべての方法のFLAG_ACTIVITY_CLEAR_TOP
うち、インテント フラグでのみ使用してそのような動作を保証できることがわかります。
通常の戻るボタンは次のように進みます。
ただし、このフラグを指定すると、このソースの例で示されているように、必要な動作が得られます。
アクティビティ A、B、C、D で構成されるタスクを考えてみましょう。D がアクティビティ B のコンポーネントに解決されるインテントで startActivity() を呼び出す場合、C と D は終了し、B は指定されたインテントを受け取り、結果としてスタックは次のようになります: A, B.
実際、選択したアクティビティに「上」に移動するには、アクション バーで使用されている「上」ナビゲーションを使用する必要があります。
/** used to handle the "up" button on the action bar, to go to the defined top activity as written on the manifest */
public static void goUpToTopActivity(final Activity currentActivity) {
final Intent intent = NavUtils.getParentActivityIntent(currentActivity);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
NavUtils.navigateUpTo(currentActivity, intent);
}
これを使用するには、この関数が使用するアクティビティをマニフェストに設定する必要があります (または、コードを変更して自分で設定することもできます)。
actionBarSherlock を使用する場合、起動させたいアクティビティごとに、次を使用します。
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.your_app.activities.MainActivity" />
Android フレームワークを使用する場合 (minSdk バージョンが API 16 以上の場合)、「parentActivityName」属性を使用します。
Intent を使用して別のアクティビティに移動するとします。
Intent i = new Intent(A.this,B.class);
startActivity(i);
このコードは「B」アクティビティに移動し、[戻る] ボタンを押すと再び「A」アクティビティに移動します。アクティビティ「A」に戻りたくない場合は、...を使用できます。
Intent i = new Intent(A.this,B.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
Android のバック スタックの詳細については、次のリンクをたどってください: http://developer.android.com/guide/components/tasks-and-back-stack.html