Estoy desarrollando una aplicación sencilla basada en fragmentos con un FragmentActivity singe. Cada 'pantalla' de la aplicación está contenida en un fragmento y todos los fragmentos se agregan al diseño del contenedor al inicio de la aplicación.Android - El botón de retroceso y el fragmento de fragmentos no funcionan
// Set up fragments in Main Activity
fragMan = getFragmentManager();
FragmentTransaction ft = fragMan.beginTransaction();
ft.add(R.id.fragment_container, settingsFragment);
ft.add(R.id.fragment_container, mapFragment);
ft.add(R.id.fragment_container, tracksFragment);
ft.add(R.id.fragment_container, waypointsFragment);
ft.commit();
Las transiciones se logran ocultando el fragmento visible en ese momento, y luego mostrando el fragmento apropiado.
ft = fragMan.beginTransaction();
ft.show(mapFragment);
ft.addToBackStack(null);
ft.commit();
Todo esto funciona bien, pero cuando se pulsa el botón de retroceso, se cierra la aplicación, independientemente de qué pantalla es visible o lo transacciones anteriores se han añadido a la pila de vuelta.
He comprobado para asegurarse de que la pila trasera está acumulando correctamente los registros y he probado muchas variaciones de métodos de transición como reemplazar fragmentos en lugar de ocultarlos/mostrarlos, crear nuevas instancias de fragmentos en lugar de almacenarlos en variables, etc. Por lo que puedo decir, mi código coincide con todos los tutoriales y ejemplos que puedo encontrar, y ni siquiera he podido encontrar preguntas similares/ejemplos de problemas similares, presumiblemente porque la implementación estándar "simplemente funciona" para otros.
Sospecho que puede ser un problema a nivel de aplicación, como una propiedad en mi manifiesto (que he investigado bastante) o algo inherente a la forma en que se configura mi aplicación que impide que el botón de retroceso funcione correctamente . Puedo sobrescribir onBackPressed para manejar las transiciones de forma manual, pero esto parece una solución bastante desagradable. ¿Alguna idea de por qué esto podría no estar comportándose como se esperaba? Por cierto, esto es en un Nexus 7 que ejecuta Jelly Bean.