Buenas, no se si te será de ayuda, pero te comento como tengo yo implementado el botón volver.
Mi proyecto va cargando Fragments.
Cada fragment tiene un numero identificativo definido en una clase Constantes.
Tengo un método cargarSeccion, que lo que hace es llamar al Fragment que se pase como parámetro y mete en la pilla de llamadas la sección que se acaba de cargar:
Código:
FragmentManager fragmentManager = activity.getSupportFragmentManager();
fragmentManager.beginTransaction().addToBackStack(String.valueOf(menuSeleccionado)).commitAllowingStateLoss();
Luego, sobreescribo el método onBackPressed de la actividad.
Si la pila anteriormente citada no está vacia, recupero la última sección que se había cargado, la cargo y elimino el elemento de la pila, de forma que si vuelves a pulsar atrás, se carga la anterior.. asi sucesivamente.
Código:
@Override
public void onBackPressed()
{
super.onBackPressed();
FragmentManager fm = getFragmentManager();
int cantidadApilados = fm.getBackStackEntryCount();
if(cantidadApilados > 0)
{
int menuVolver = Integer.parseInt(fm.getBackStackEntryAt(cantidadApilados - 1).getName());
ProjectUtils.cargarSeccion(menuVolver);
// Elimino la última llamada que se había realizado
fm.popBackStack();
}
else
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
A mi al menos me funciona perfecto.
Saludos!