Pour activer le bouton de retour de la barre d'action, vous avez évidemment besoin d'une barre d'action dans votre activité. Celle-ci est définie par le thème que vous utilisez. Vous pouvez définir le thème de votre activité dans le champ AndroidManfiest.xml
. Si vous utilisez, par exemple, le @android:style/Theme.NoTitleBar
vous n'avez pas de barre d'action. Dans ce cas, l'appel à getActionBar()
retournera null. Assurez-vous donc d'avoir d'abord une barre d'action.
L'étape suivante consiste à définir le android:parentActivityName
à l'activité dans laquelle vous voulez naviguer si vous appuyez sur le bouton de retour. Cette opération doit être effectuée dans la section AndroidManifest.xml
aussi.
Maintenant, vous pouvez activer le bouton retour dans le onCreate
de votre activité "enfant".
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
Maintenant, vous devez implémenter la logique pour le bouton retour. Il suffit de remplacer la fonction onOptionsItemSelected
dans votre activité "enfant" et vérifiez l'id du bouton retour qui est android.R.id.home
.
Vous pouvez maintenant lancer la méthode NavUtils.navigateUpFromSameTask(this);
MAIS si vous n'avez pas spécifié l'option android:parentActivityName
en vous AndroidManifest.xml
cela fera planter votre application.
Parfois, c'est ce que vous voulez, car 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 en utilisant la fonction getParentActivityIntent()
méthode. Si elle renvoie null, cela signifie que vous n'avez pas spécifié le parent.
Dans ce cas, vous pouvez lancer le onBackPressed()
qui fait essentiellement la même chose que si l'utilisateur appuyait sur le bouton retour de l'appareil. Une bonne implémentation qui ne plantera 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 choisir la voie que vous voulez suivre, mais j'ai trouvé cette solution utile, surtout si vous utilisez une classe de base pour toutes vos activités.
66 votes
getActionBar().setDisplayHomeAsUpEnabled(true);
dans onCreate etswitch (item.getItemId()) {case android.R.id.home: onBackPressed();break;}
suronOptionsItemSelected
? les deux dans ServicesViewActivity8 votes
Pourquoi ne pas répondre par des étagères ?