Estoy usando la biblioteca de compatibilidad de Android para implementar fragmentos y he extendido la muestra de diseño para que un fragmento contenga un botón que dispara otro fragmento.
En el panel de selección a la izquierda tengo 5 elementos seleccionables - A B C D E
.
Cada uno carga un fragmento (vía FragmentTransaction:replace
) en el panel de detalles:a b c d e
Ahora he extendido el fragmento e
para que contenga un botón que carga otro fragmento e1
también en el panel de detalles. He hecho esto en e
el método onClick del fragmento 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 el fragmento e
está en el panel de detalles. Esto está bien y lo que quiero. Sin embargo, si presiono el back
botón en este punto, no hace nada. Tengo que hacer clic dos veces porque e1
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 cada vez que A B C D E
se selecciona:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
¿Me pregunto si esta es la solución correcta o si debería estar haciendo algo diferente?