Es esta la forma correcta de limpiar la pila de fragmentos al dejar una pila profundamente anidada?
Estoy usando la biblioteca de compatibilidad de Android para implementar fragmentos y he ampliado la muestra de diseño para que un fragmento contenga un botón que dispare otro fragmento.
En el panel de selección de la izquierda tengo 5 elementos seleccionables:A B C D E
.
Cada carga un fragmento (a través deFragmentTransaction:replace
) en el panel de detalles -a b c d e
Ahora he extendido el fragmentoe
para contener un botón que carga otro fragmentoe1
también en el panel de detalles. He hecho esto en el fragmentoe
étodo onClick de @ de la siguiente manera:
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.replace(R.id.details_frag, newFrag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
Si hago las siguientes selecciones:
E - e - e1 - D - E
Entonces fragmentoe
está en el panel de detalles. Esto está bien y lo que quiero. Sin embargo, si golpeo laback
en este punto no hace nada. Tengo que hacer clic dos veces porquee1
todavía está en la pila. Además, después de hacer clic, obtuve una excepción de puntero nulo en onCreateView:
Para 'resolver' este problema, agregué lo siguiente siempre queA B C D E
está seleccionado:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
¿Solo se pregunta si esta es la solución correcta o si debería estar haciendo algo diferente?