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