Я використовую бібліотеку сумісності 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();
}
Просто цікаво, чи це правильне рішення чи я повинен робити щось інше?