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