Lorsque le bouton BACK est enfoncé sur le 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
lorsque la connexion / l'inscription réussie se produit. Une fois HomeScreen démarré, je souhaite empêcher les utilisateurs de revenir aux écrans de connexion ou d'inscription en appuyant sur la touche RETOUR.
J'ai essayé d'utiliser Intent.FLAG_ACTIVITY_NO_HISTORY
, mais comme l'application a une intégration Facebook, lorsque la `` Connexion avec Facebook '' est utilisée, Facebook devrait revenir à l'écran de connexion initial, donc je devrais garder un historique de ces activités.
J'ai pensé remplacer le comportement du bouton BACK HomeScreen
pour terminer directement une application lorsque le bouton est enfoncé et j'ai utilisé
@Override
public void onBackPressed() {
finish();
}
mais cela ne fonctionne pas non plus.
Réponses:
Ma suggestion serait de terminer l'activité à laquelle vous ne voulez pas que les utilisateurs retournent. Par exemple, dans votre activité de connexion, juste après avoir appelé
startActivity
, appelezfinish()
. Lorsque les utilisateurs cliquent sur le bouton de retour, ils ne pourront pas accéder à l'activité de connexion, car celle-ci a été supprimée de la pile.la source
finish
pendant une transition partagée, vous pouvez avoir un saignement de l'activité précédente. par exemple, si vous avezHomeActivity
->IntermediateActivity
->FinalActivity
, et vous appelezfinish()
auIntermediateActivity
immédiatement après le démarrage de la ,FinalActivity
vous verrez leHomeActivity
pour un moment bref.La solution suivante peut être très utile dans le scénario de connexion / activité principale habituel ou dans la mise en œuvre d'un écran de blocage.
Pour minimiser l'application plutôt que de revenir à l'activité précédente, vous pouvez remplacer
onBackPressed()
comme ceci:moveTaskToBack(boolean nonRoot)
laisse votre pile arrière telle qu'elle est, 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 faux, cela ne fonctionne que si l'activité est la racine d'une tâche; si vrai, cela fonctionnera pour toute activité dans une tâche.la source
Je ne sais pas exactement ce que vous voulez, mais il semble que cela devrait être possible, et il semble également que vous soyez déjà sur la bonne voie.
Voici quelques liens qui pourraient vous aider:
Désactiver le bouton de retour dans Android
Comment puis-je désactiver le retour à une activité?
la source
System.exit(0)
on l'appelle (je sais que ce n'est pas la meilleure pratique, mais je voulais juste donner un exemple).Il existe deux solutions pour votre cas, l'activité A démarre l'activité B, mais vous ne souhaitez pas revenir à l'activité A de l'activité B.
1. Suppression de l'activité précédente A de la pile arrière.
2. Désactiver l'action du bouton de retour dans l'activité B.
Il existe deux façons d'empêcher l'événement de retour en arrière comme ci-dessous,
1) Recommander une approche
2, remplacer la méthode onKeyDown
J'espère que c'est utile, mais cela dépend toujours de vos situations.
la source
finish()
. Inutilement réfléchi avecnohistory
attribut, indicateurs d'intention, balises de manifeste d'activité parent, etc.! Idiot, merci pour la réponse!Puisqu'il existe déjà de nombreuses grandes solutions suggérées, essayez mal de donner une explication plus dipictive.
Supprimez l'activité précédente de Backstack. Facile
finish()
Méthode d' appelLe flux normal:
Toutes les activités sont stockées dans une pile appelée Backstack.
Lorsque vous démarrez une nouvelle activité (
startActivity(...)
), la nouvelle activité est poussée en haut de la pile et lorsque vous appuyez sur le bouton de retour, l'activité est extraite de la pile.Un point clé à noter est que lorsque le bouton retour est enfoncé, la
finish();
méthode est appelée en interne. Il s'agit du comportement par défaut de la méthode onBackPressed ().Donc, si vous voulez sauter l'activité B?
Ajoutez simplement la
finish();
méthode après votrestartActvity(...)
dans l'activité Bla source
finish()
vous donne la méthode pour fermer l'activité en cours et non la totalité de l'application. Et vous feriez mieux de ne pas chercher de méthodes pour tuer l'application. Petit conseil.Avez-vous essayé la conjonction de
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_HISTORY
? N'oubliez pas d'utiliser ces drapeaux pourIntent
commencer l'activité!la source
FLAG_ACTIVITY_NO_HISTORY
empêche mon LoginScreen de capturer le rappel de Facebook lorsque la connexion avec Facebook est utilisée. Parce qu'une fois que le focus sort de l'écran de connexion, il ne peut pas être repris (car il n'y a pas d'historique). Mais je ne l'ai pas essayé avecIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
, je vais le vérifier, merci!finish()
méthode, je ne la connaissais pas.Mettez
finish()
juste aprèsla source
La réponse de paulsm4 est la bonne. Si
onBackPressed()
vous venez de revenir, cela désactivera le bouton de retour. Cependant, je pense qu'une meilleure approche étant donné votre cas d'utilisation est d'inverser la logique d'activité, c'est-à-dire de faire de votre activité à domicile la principale, de vérifier si l'utilisateur y est connecté, sinon de démarrer l'activité de connexion. La raison en est que si vous remplacez le bouton de retour dans votre activité principale, la plupart des utilisateurs seront confus lorsqu'ils appuieront et votre application ne fera rien.la source
Si vous ne souhaitez pas revenir à toutes les activités de votre application, vous pouvez utiliser
En savoir plus ici: http://developer.android.com/guide/topics/manifest/activity-element.html
la source
Cette méthode fonctionne bien
la source
Remplacez simplement la méthode onKeyDown et vérifiez si le bouton de retour a été enfoncé.
la source
Lorsque vous créez,
onBackPressed()
supprimezsuper.onBackPressed();
et cela devrait fonctionnerla source
Mettre
immédiatement après ActivityStart pour arrêter l'activité, empêchant tout moyen d'y revenir. Puis ajouter
à l'activité que vous commencez.
la source