Я использую библиотеку совместимости с 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();
}
Просто интересно, правильное ли это решение или мне нужно сделать что-то другое?