Android互換ライブラリを使用してフラグメントを実装し、レイアウトサンプルを拡張して、フラグメントに別のフラグメントを起動するボタンが含まれるようにしました。
左側の選択ペインには、5つの選択可能なアイテムがあります- A B C D E
。
FragmentTransaction:replace
それぞれが詳細ペインにフラグメントを(経由で)ロードします-a b c d e
これで、フラグメントを拡張して、詳細ペインにもe
別のフラグメントをロードするボタンを含めることができました。e1
これは、フラグメントe
のonClickメソッドで次のように実行しました。
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
次の選択をした場合:
E - e - e1 - D - E
次に、フラグメントe
が詳細ペインに表示されます。これは問題なく、私が欲しいものです。ただし、back
この時点でボタンを押しても何も起こりません。e1
まだスタック上にあるので、2回クリックする必要があります。さらに、クリックした後、onCreateViewでnullポインタ例外が発生しました。
この問題を「解決」するために、A B C D E
選択するたびに以下を追加しました。
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
これが正しい解決策なのか、それとも私が何か違うことをすべきなのか疑問に思っていますか?