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();
}
これが正しい解決策であるか、それとも私が何か別のことをするべきかどうか疑問に思っていますか?