Używam biblioteki Android Compatibility do implementowania fragmentów i rozszerzyłem przykładowy układ, tak aby fragment zawierał przycisk, który odpala inny fragment.
W okienku wyboru po lewej stronie mam 5 elementów do wyboru - A B C D E
.
Każdy ładuje fragment (przez FragmentTransaction:replace
) w okienku szczegółów -a b c d e
Teraz rozszerzyłem fragment, e
aby zawierał przycisk, który ładuje kolejny fragment e1
również w okienku szczegółów. Zrobiłem to na e
metodzie onClick fragmentu w następujący sposób:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Jeśli dokonam następujących wyborów:
E - e - e1 - D - E
Następnie fragment e
znajduje się w okienku szczegółów. To jest w porządku i czego chcę. Jeśli jednak back
w tym momencie wcisnę przycisk, to nic nie robi. Muszę kliknąć dwukrotnie, ponieważ e1
wciąż jest na stosie. Ponadto po kliknięciu w onCreateView pojawił się wyjątek wskaźnika zerowego:
Aby `` rozwiązać '' ten problem, dodałem następujące po A B C D E
wybraniu:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Zastanawiam się tylko, czy to jest właściwe rozwiązanie, czy też powinienem robić coś innego?