365 votes

Désactiver le bouton retour dans Android

Comment désactiver le bouton retour dans Android lors de la déconnexion de l'application ?

1 votes

Pouvez-vous être un peu plus clair sur la question ? Si vous cherchez à remplacer le comportement par défaut du bouton de retour, consultez cette question ici. stackoverflow.com/questions/2000102/

27 votes

Veuillez ne pas le faire à moins d'avoir une bonne raison, car le fait de briser le modèle de fonctionnement attendu nuit très légèrement à l'ensemble de la plate-forme.

15 votes

Vous voudriez le faire si vous devez faire face à un Samsung S4 stupide où le bouton arrière est sensible au toucher (non physique), juste sur le bord du téléphone, qui est déjà si sensible au toucher qu'une paume reposant contre le côté va revenir en arrière.

702voto

Gopinath Points 5997

Remplacez la méthode onBackPressed et ne faites rien si vous voulez gérer le bouton retour du périphérique.

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

14 votes

C'est beaucoup mieux et plus propre que de surcharger les méthodes de gestion des clés, et cela a le même effet. Excellente réponse !

2 votes

Super solution, mec. Y a-t-il un moyen de faire la même chose avec le bouton d'accueil ?

1 votes

C'est génial ! En fait, je voulais toujours revenir à mon activité principale lorsque j'appuyais sur le bouton de retour d'une autre activité, et le remplacement de cette méthode me permet de le faire très facilement.

185voto

Javanator Points 6536

Si vous recherchez un niveau d'api plus élevé (2.0 et plus) ceci fonctionnera très bien

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

Si vous recherchez le niveau d'api d'Android jusqu'à 1.6.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

Écrivez le code ci-dessus dans votre activité pour empêcher l'appui sur le bouton "retour".

5 votes

Cette méthode est plus rétrocompatible que l'utilisation de onbackpressed en raison de l'exigence du niveau d'api de onbackpressed.

5 votes

Bonne réponse. Bien que je n'en aie pas besoin pour mon projet, j'apprécie que vous ayez fourni l'ancienne et la nouvelle méthode. Ceci devrait être marqué comme une réponse correcte. +1

1 votes

@Javanator le deuxième ne fonctionne pas pour moi (pour le niveau 16 de l'API par exemple), mais le premier fonctionne à merveille.

14voto

Error Points 32

Je l'utilise.............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}

9voto

Stephan Branczyk Points 5322

Si vous voulez vous assurer que votre application client Android est déconnectée d'un serveur avant que votre activité ne soit tuée --> déconnexion avec un service sur son propre thread (c'est ce que vous êtes censé faire de toute façon).

Désactiver le bouton retour ne résoudra rien pour vous. Vous aurez toujours le même problème lorsque l'utilisateur reçoit un appel téléphonique par exemple. Lorsqu'un appel téléphonique est reçu, votre activité a autant de chances d'être tuée avant d'obtenir une réponse fiable du réseau.

C'est pourquoi il faut laisser un service attendre la réponse du réseau sur son propre fil de discussion, puis le faire réessayer s'il n'y parvient pas. Le service Android est non seulement beaucoup moins susceptible d'être tué avant d'avoir reçu une réponse, mais s'il est vraiment tué avant d'avoir terminé son travail, il peut toujours être réactivé par AlarmManager pour réessayer.

5voto

Ted Hopp Points 122617

Si vous souhaitez désactiver votre application pendant la déconnexion, vous pouvez faire apparaître une boîte de dialogue non annulable.

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