Я использую библиотеку Android Compatibility для реализации фрагментов и расширил образец макета, чтобы фрагмент содержал кнопку, которая запускает другой фрагмент.
В панели выбора слева у меня есть 5 элементов для выбора - A B C D E
.
Каждый загружает фрагмент (через FragmentTransaction:replace
) в области сведений - a b c d e
Теперь я расширил фрагмент e
, добавив в него кнопку, которая загружает другой фрагмент e1
также в области сведений. Я сделал это для метода onClick фрагмента e
следующим образом:
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
все еще в стеке. Кроме того, после щелчка я получил исключение нулевого указателя в onCreateView:
Чтобы «решить» эту проблему, я добавлял следующее, когда выбрано A B C D E
:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Просто интересно, правильное ли это решение или я должен делать что-то другое?