Pour activer le bouton de retour ActionBar, vous avez évidemment besoin d'une ActionBar dans votre activité. Ceci est défini par le thème que vous utilisez. Vous pouvez définir le thème de votre activité dans le AndroidManfiest.xml
. Si vous utilisez par exemple le @android:style/Theme.NoTitleBar
thème, vous n'avez pas d'ActionBar. Dans ce cas, l'appel à getActionBar()
renverra null. Assurez-vous donc d'avoir d'abord une ActionBar.
L'étape suivante consiste à définir l' android:parentActivityName
activité sur laquelle vous souhaitez naviguer si vous appuyez sur le bouton Retour. Cela devrait également être fait dans le AndroidManifest.xml
.
Vous pouvez maintenant activer le bouton retour dans la onCreate
méthode de votre activité "enfant".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Vous devez maintenant implémenter la logique du bouton de retour. Vous remplacez simplement la onOptionsItemSelected
méthode dans votre activité "enfant" et vérifiez l'identifiant du bouton de retour qui est android.R.id.home
.
Maintenant , vous pouvez tirer la méthode NavUtils.navigateUpFromSameTask(this);
MAIS si vous n'avez pas spécifié le android:parentActivityName
en vous AndroidManifest.xml
cela va planter votre application.
Parfois, c'est ce que vous voulez parce que cela vous rappelle que vous avez oublié «quelque chose». Donc, si vous voulez éviter cela, vous pouvez vérifier si votre activité a un parent utilisant la getParentActivityIntent()
méthode. Si cela renvoie null, vous n'avez pas spécifié le parent.
Dans ce cas, vous pouvez déclencher la onBackPressed()
méthode qui fait essentiellement la même chose que si l'utilisateur appuyait sur le bouton de retour de l'appareil. Une bonne implémentation qui ne plante jamais votre application serait:
@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);
}
}
Veuillez noter que l'animation que l'utilisateur voit est différente entre NavUtils.navigateUpFromSameTask(this);
et onBackPressed()
.
C'est à vous de décider quelle route vous prenez, mais j'ai trouvé la solution utile, surtout si vous utilisez une classe de base pour toutes vos activités.
getActionBar().setDisplayHomeAsUpEnabled(true);
dans onCreate etswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
dansonOptionsItemSelected
? les deux dans ServicesViewActivity