Comment éviter de revenir à l’activité précédente?

Lorsque vous appuyez sur le bouton BACK du téléphone, je souhaite empêcher une activité spécifique de revenir à la précédente.

Plus précisément, j’ai des écrans de connexion et d’inscription, les deux démarrent une nouvelle activité appelée HomeScreen lorsqu’une connexion / inscription réussie se produit. Une fois HomeScreen démarré, je veux empêcher les utilisateurs de retourner aux écrans de connexion ou de connexion en appuyant sur la touche BACK.

J’ai essayé d’utiliser Intent.FLAG_ACTIVITY_NO_HISTORY , mais comme l’application intègre Facebook, lorsque vous utilisez «Connexion avec Facebook», Facebook devrait retourner à l’écran de connexion initial. Je devrais donc conserver un historique de ces activités.

J’ai pensé à HomeScreen outre le comportement du bouton BACK de HomeScreen pour terminer directement une application lorsque le bouton est enfoncé et que j’ai utilisé

 @Override public void onBackPressed() { finish(); } 

mais cela ne fonctionne pas non plus.

Ma suggestion serait de terminer l’activité à laquelle vous ne souhaitez pas que les utilisateurs retournent. Par exemple, dans votre activité de connexion, juste après avoir appelé startActivity , appelez finish() . Lorsque les utilisateurs appuient sur le bouton Précédent, ils ne peuvent pas accéder à l’activité de connexion car celle-ci a été supprimée de la stack.

La solution suivante peut être très utile dans le scénario habituel de connexion / activité principale ou dans la mise en place d’un écran bloquant.

Pour réduire l’application plutôt que de revenir à l’activité précédente, vous pouvez remplacer onBackPressed() comme ceci:

 @Override public void onBackPressed() { moveTaskToBack(true); } 

moveTaskToBack(boolean nonRoot) laisse votre stack arrière telle quelle, met simplement votre tâche (toutes les activités) en arrière-plan. Comme si l’utilisateur appuyait sur le bouton Accueil .

Paramètre boolean nonRoot – Si false, cela ne fonctionne que si l’activité est la racine d’une tâche; Si cela est vrai, cela fonctionnera pour toute activité dans une tâche.

Je ne sais pas exactement ce que vous voulez, mais il semble que cela devrait être possible, et il semble que vous êtes déjà sur la bonne voie.

Voici quelques liens qui pourraient vous aider:

Désactiver le bouton de retour dans Android

  MyActivity.java => @Override public void onBackPressed() { return; } 

Comment puis-je désactiver le retour à une activité?

  AndroidManifest.xml =>  

Il y a deux solutions pour votre cas, comme par exemple l’activité Un début d’activité B, mais vous ne voulez pas revenir à l’activité A dans l’activité B.

1. Suppression de l’activité précédente A de la stack arrière.

  Intent intent = new Intent(activityA.this, activityB.class); startActivity(intent); finish(); // Destroy activity A and not exist in Back stack 

2. Action sur le bouton Retour désactivé.

Il y a deux façons d’éviter un retour en arrière comme ci-dessous,

1) Recommander l’approche

 @Override public void onBackPressed() { } 

2) Remplacer la méthode onKeyDown

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) { return false; } return super.onKeyDown(keyCode, event); } 

J’espère que c’est utile, mais dépend toujours de vos situations.

finish() vous donne la méthode pour fermer l’activité en cours pas toute l’application. Et mieux vaut ne pas chercher des méthodes pour tuer les applications. Petit conseil

Avez-vous essayé la conjonction de Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY ? N’oubliez pas d’utiliser ces drapeaux dans l’activité de démarrage Intent !

La réponse de paulsm4 est la bonne. Si vous retournez dans onBackPressed() , le bouton Précédent sera désactivé. Cependant, je pense qu’une meilleure approche étant donné que votre cas d’utilisation est de retourner la logique d’activité, c’est-à-dire de rendre votre activité principale principale, vérifiez si l’utilisateur est connecté, sinon, lancez l’activité de connexion. La raison en est que si vous remplacez le bouton Retour dans votre activité principale, la plupart des utilisateurs seront confus lorsqu’ils appuieront sur le bouton Retour et votre application ne fera rien.

Mettez finish() juste après

 Intent i = new Intent(Summary1.this,MainActivity.class); startActivity(i); finish(); 

Cette méthode fonctionne bien

 Intent intent = new Intent(Profile.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Il suffit de remplacer la méthode onKeyDown et de vérifier si le bouton Précédent a été appuyé.

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //Back buttons was pressed, do whatever logic you want } return false; } 

Si vous ne voulez pas revenir à toutes les activités de votre application, vous pouvez utiliser

 android:launchMode="singleTask" 

En savoir plus ici: http://developer.android.com/guide/topics/manifest/activity-element.html

Mettre

 finish(); 

Immédiatement après ActivityStart, arrêtez l’activité empêchant tout moyen de revenir en arrière. Puis append

 onCreate(){ getActionBar().setDisplayHomeAsUpEnabled(false); ... } 

À l’activité que vous commencez.