102 votes

Comment remplacer le bouton de retour de la barre d'action dans Android ?

Je veux personnaliser le bouton de retour de l'activité dans la barre d'action, et non dans le bouton de retour de la touche de raccourci. J'ai remplacé le bouton onBackPressed() méthode. Cela fonctionne avec le bouton retour de mon émulateur, mais pas avec le bouton retour de la barre d'action.

Je veux que ça se passe avec la barre d'action. Comment puis-je le faire ?

Voici mon code :

@Override
public void onBackPressed() {
    Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
    return;
}

J'ai utilisé ce toast pour savoir si le retour pressé fonctionne ou non, mais la mise en œuvre réelle change comme pour revenir à l'activité précédente. Mais cela ne fonctionne pas avec le bouton présent en haut de la barre d'action (à côté du titre de l'activité).

S'il vous plaît quelqu'un pourrait me spécifier le problème.

224voto

ibrahimyilmaz Points 2498

Je pense que vous voulez remplacer l'opération de clic du bouton d'accueil. Vous pouvez remplacer cette fonctionnalité comme ceci dans votre activité.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        Toast.makeText(getApplicationContext(),"Back button clicked", Toast.LENGTH_SHORT).show(); 
        break;
    }
    return true;
}

51voto

ruX Points 805

Si vous voulez que le bouton de retour de la barre d'action se comporte de la même manière que le bouton de retour du matériel :

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                    onBackPressed();
                    return true;
            }
            return false;
    }

11voto

ssi-anik Points 775

Deux choses à garder à l'esprit : l'utilisateur peut soit appuyer sur le bouton retour, soit sur le bouton d'accueil de la barre d'action.
Donc, si vous voulez le rediriger vers la même destination, vous pouvez le faire.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
    }
    return false;
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
    startActivity(intent);
    finish();
}

Cela amènera l'utilisateur à l'intention en appuyant sur une touche ou sur le bouton de la barre d'action.

10voto

Stephen Bridgett Points 131

Désolé pour la réponse tardive, mais pour toute personne arrivant sur cette page avec la même question, j'ai essayé ce qui précède :

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  ...
  if (item.getItemId() == android.R.id.home) {
    ....
  }
  ....
}

mais il n'a pas réussi à capter l'appui sur le bouton "Retour".

Finalement, j'ai trouvé une méthode qui a fonctionné pour moi sur https://stackoverflow.com/a/37185334/3697478 qui consiste à remplacer la fonction "onSupportNavigateUp()" car j'utilise la barre d'action de la bibliothèque de support "AppCompatActivity". (Il existe un équivalent "onNavigateUp()" pour la bibliothèque plus récente de barres d'action/outils).

@Override
public boolean onSupportNavigateUp(){  
  finish();  
  return true;  
}

et j'ai supprimé la section "Android:parentActivityName=".MainActivity" du fichier manifeste.

7voto

Krunal Shah Points 215
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                case android.R.id.home:
                       finish();
                   break;
                }
                return true;
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X