Para habilitar el botón de retroceso ActionBar, obviamente necesita una ActionBar en su Actividad. Esto lo establece el tema que está utilizando. Puede configurar el tema para su Actividad en el AndroidManfiest.xml
. Si está utilizando, por ejemplo, el @android:style/Theme.NoTitleBar
tema, no tiene una barra de acciones. En este caso, la llamada a getActionBar()
volverá nulo. Así que primero asegúrate de tener una ActionBar.
El siguiente paso es configurar la android:parentActivityName
actividad que desea navegar si presiona el botón Atrás. Esto debería hacerse en el AndroidManifest.xml
también.
Ahora puede habilitar el botón de retroceso en el onCreate
método de su actividad "secundaria".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Ahora debe implementar la lógica para el botón Atrás. Simplemente anule el onOptionsItemSelected
método en su actividad "secundaria" y verifique la identificación del botón Atrás que está android.R.id.home
.
Ahora puede activar el método NavUtils.navigateUpFromSameTask(this);
PERO si no ha especificado el android:parentActivityName
en usted, AndroidManifest.xml
esto bloqueará su aplicación.
A veces esto es lo que quieres porque te recuerda que olvidaste "algo". Entonces, si desea evitar esto, puede verificar si su actividad tiene un padre utilizando el getParentActivityIntent()
método. Si esto devuelve nulo, no ha especificado el padre.
En este caso, puede activar el onBackPressed()
método que básicamente hace lo mismo que si el usuario presionara el botón Atrás en el dispositivo. Una buena implementación que nunca bloquea tu aplicación sería:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (getParentActivityIntent() == null) {
Log.i(TAG, "You have forgotten to specify the parentActivityName in the AndroidManifest!");
onBackPressed();
} else {
NavUtils.navigateUpFromSameTask(this);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Tenga en cuenta que la animación que ve el usuario es diferente entre NavUtils.navigateUpFromSameTask(this);
y onBackPressed()
.
Depende de usted qué camino tomar, pero la solución me pareció útil, especialmente si utiliza una clase base para todas sus actividades.
getActionBar().setDisplayHomeAsUpEnabled(true);
en onCreate yswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
enonOptionsItemSelected
? ambos en ServicesViewActivity