Per abilitare il pulsante Indietro di ActionBar è ovviamente necessario un ActionBar nella tua attività. Questo è impostato dal tema che stai utilizzando. Puoi impostare il tema della tua attività in AndroidManfiest.xml
. Se stai usando ad esempio il @android:style/Theme.NoTitleBar
tema, non hai una ActionBar. In questo caso la chiamata a getActionBar()
restituirà null. Quindi assicurati di avere prima un ActionBar.
Il prossimo passo è impostare l' android:parentActivityName
attività che si desidera navigare se si preme il pulsante Indietro. Anche questo dovrebbe essere fatto AndroidManifest.xml
.
Ora puoi abilitare il pulsante Indietro nel onCreate
metodo della tua attività "figlio".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Ora dovresti implementare la logica per il pulsante Indietro. Basta semplicemente ignorare il onOptionsItemSelected
metodo nella propria attività "figlio" e verificare l'id del pulsante Indietro che è android.R.id.home
.
Ora puoi attivare il metodo NavUtils.navigateUpFromSameTask(this);
MA se non hai specificato android:parentActivityName
in te AndroidManifest.xml
questo si bloccherà la tua app.
A volte questo è quello che vuoi perché ti ricorda che hai dimenticato "qualcosa". Quindi, se vuoi impedirlo, puoi verificare se la tua attività ha un genitore usando il getParentActivityIntent()
metodo. Se restituisce null, non è stato specificato il genitore.
In questo caso puoi attivare il onBackPressed()
metodo che fa sostanzialmente lo stesso che se l'utente premesse il pulsante Indietro sul dispositivo. Una buona implementazione che non blocca mai la tua app sarebbe:
@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);
}
}
Si noti che l'animazione visualizzata dall'utente è diversa tra NavUtils.navigateUpFromSameTask(this);
e onBackPressed()
.
Dipende da te quale strada prendi, ma ho trovato la soluzione utile, soprattutto se usi una classe base per tutte le tue attività.
getActionBar().setDisplayHomeAsUpEnabled(true);
in onCreate eswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
inonOptionsItemSelected
? entrambi in ServicesViewActivity