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 epara que contenga un botón que carga otro fragmento e1también en el panel de detalles. He hecho esto en eel 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 eestá en el panel de detalles. Esto está bien y lo que quiero. Sin embargo, si presiono el backbotón en este punto, no hace nada. Tengo que hacer clic dos veces porque e1todaví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 Ese 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?