Я использую библиотеку совместимости 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
все еще находится в стеке. Кроме того, после щелчка мыши я получил исключение нулевого указателя в onCreateView:
Чтобы решить эту проблему, я добавил следующее при каждом выборе A B C D E
:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Просто интересно, правильно ли это решение или я должен делать что-то другое?