単一の FragmentActivity を使用して、単純なフラグメント ベースのアプリケーションを開発しています。アプリケーションの各「画面」はフラグメントに含まれており、アプリケーションの起動時にすべてのフラグメントがコンテナー レイアウトに追加されます。
// Set up fragments in Main Activity
fragMan = getFragmentManager();
FragmentTransaction ft = fragMan.beginTransaction();
ft.add(R.id.fragment_container, settingsFragment);
ft.add(R.id.fragment_container, mapFragment);
ft.add(R.id.fragment_container, tracksFragment);
ft.add(R.id.fragment_container, waypointsFragment);
ft.commit();
遷移は、現在表示されているフラグメントを非表示にしてから、適切なフラグメントを表示することによって実行されます。
ft = fragMan.beginTransaction();
ft.show(mapFragment);
ft.addToBackStack(null);
ft.commit();
これはすべて正常に機能しますが、戻るボタンが押されると、どの画面が表示されているか、バックスタックに追加された以前のトランザクションに関係なく、アプリケーションが終了します。
バックスタックがレコードを適切に蓄積していることを確認し、フラグメントを非表示/表示するのではなく置換する、変数に格納するのではなくフラグメントの新しいインスタンスを作成するなど、さまざまな遷移方法のバリエーションを試しました。私が知ることができるように、私のコードは私が見つけることができるすべてのチュートリアルと例に一致し、おそらく標準的な実装が他の人にとって「うまくいく」ため、同様の質問/同様の問題の例を見つけることさえできませんでした.
マニフェストのプロパティ(かなり徹底的に調査しました)や、アプリケーションの設定方法に固有のものなど、アプリケーションレベルの問題である可能性があり、戻るボタンが正しく機能しない可能性があります。トランジションを手動で処理するために onBackPressed をオーバーライドできますが、これは非常に醜い回避策のようです。これが期待どおりに動作しない理由についてのアイデアはありますか? ちなみに、これはJelly Beanを実行しているNexus 7にあります。