Lorsque je clique sur le bouton Déconnexion dans mon activité de profil, je veux amener l'utilisateur à la page de connexion , où il doit utiliser de nouvelles informations d'identification.
Par conséquent, j'ai utilisé ce code:
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
dans le onButtonClick
bouton Déconnexion.
Mais le problème est que lorsque je clique sur le bouton de retour de l'appareil sur l'activité de connexion, cela me conduit à ProfileActivity. Je m'attendais à ce que l'application se ferme lorsque j'appuie sur le bouton de retour de l'appareil sur LoginActivity.
Qu'est-ce que je fais mal?
J'ai également ajouté android:launchMode="singleTop"
dans le manifeste pour mon LoginActivity
Merci
android
back-stack
Archie.bpgc
la source
la source
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
j'ai eu la réponse à cette question: stackoverflow.com/questions/3473168Réponses:
La solution proposée ici a fonctionné pour moi:
Java
Kotlin
Cependant, il nécessite un niveau d'API> = 11.
la source
FLAG_ACTIVITY_CLEAR_TASK
.C'est le moyen officiel d'obtenir. Pas besoin de modifier toutes les activités de l'application.Voici une solution pour effacer toutes les activités de votre application lorsque vous utilisez le bouton de déconnexion.
Chaque fois que vous démarrez une activité, démarrez-la comme ceci:
Lorsque vous souhaitez fermer l'ensemble de l'application, procédez comme suit:
RESULT_CLOSE_ALL est une variable globale finale avec un entier unique pour signaler que vous souhaitez fermer toutes les activités.
Définissez ensuite le
onActivityResult(...)
rappel de chaque activité afin que lorsqu'une activité retourne avec la valeur RESULT_CLOSE_ALL, elle appelle égalementfinish()
:Cela provoquera un effet de cascade qui fermera toutes vos activités.
Ceci est un hack cependant et utilise
startActivityForResult
d'une manière qu'il n'a pas été conçu pour être utilisé.Peut-être qu'une meilleure façon de le faire serait d'utiliser des récepteurs de diffusion comme indiqué ici:
Lors de la déconnexion, effacez la pile de l'historique des activités, empêchant le bouton "Retour" d'ouvrir les activités uniquement connectées
Consultez également ces discussions pour d'autres méthodes:
Android: effacez la pile arrière
Terminez toutes les activités précédentes
la source
Pour effacer complètement la pile d'activités, vous souhaitez créer une nouvelle pile de tâches à l'aide de TaskStackBuilder, par exemple:
Cela ne créera pas seulement une nouvelle pile de tâches propre, cela permettra également le bon fonctionnement du bouton «haut» si votre LoginActivity a une activité parent.
la source
FLAG_ACTIVITY_NEW_TASK
oufinishAffinity()
n'a pas fonctionné pour moi. Seule cette réponse a résolu le but.finishAffinity()
ajouté dans l'API 16. UtilisationActivityCompat.finishAffinity()
dans les versions précédentes. Quand vous lancerez une activité en utilisant l'intention et terminerez l'activité en cours. Maintenant, utilisez à laActivityCompat.finishAffinity()
placefinish()
. il terminera toutes les activités empilées en dessous de l'activité actuelle. Ça fonctionne bien pour moi.la source
ActivityCompat.finishAffinity()
finishAffinity()
termine également l'activité en cours avec toutes les activités présentes dans la pile arrière de la même affinité.Ce qui a fonctionné pour moi
la source
Une solution possible que je peux vous suggérer est d'ajouter
android:launchMode="singleTop"
dans le manifeste pour mon ProfileActivity . et quand vous déconnecter est cliqué u peut logoff recommençant vous LoginActivity. à la déconnexion, vous pouvez appeler ça.la source
Pour l'API 11+, vous pouvez utiliser
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
comme ceci:Il effacera totalement toutes les activités précédentes et commencera une nouvelle activité.
la source
Vous pouvez essayer
finishAffinity()
, il ferme toutes les activités en cours et fonctionne sur et au-dessus d'Android 4.1la source
Je suis également confronté au même problème.
dans l'activité de connexion ce que je fais est.
à la déconnexion
Cela fonctionne bien, mais lorsque je suis dans ActivityLoggedIn et que je minimise l'application et clique sur l'icône du bouton du lanceur dans le tiroir de l'application, MainActivity redémarre: - / j'utilise le drapeau
pour MainActivity.
la source
Utilisez ce qui suit pour
activity
supprimer l' indicateur CLEAR_TASK pour l'utilisation de fragments.
J'espère que cela peut utiliser pour certaines personnes.
la source
Gardez juste
la source
Aucun des indicateurs d'intention n'a fonctionné pour moi, mais voici comment je l'ai corrigé:
Lorsqu'un utilisateur se déconnecte d'une activité, je devais diffuser un message à partir de cette activité, puis le recevoir dans les activités que je voulais fermer, après quoi j'appelle finish (); et ça marche plutôt bien.
la source
Essayez ceci, cela fonctionnera:
la source
Au niveau d'API 11 ou supérieur, utilisez
FLAG_ACTIVITY_CLEAR_TASK
etFLAG_ACTIVITY_NEW_TASK
marquez sur Intention pour effacer toute la pile d'activités.la source
Utilisez ceci
la source
ajouter au manifeste pour votre activité
android:launchMode="singleTask"
la source
Kotlin avancé et réutilisable:
Vous pouvez définir le drapeau directement en utilisant la méthode setter. Dans Kotlin
or
est le remplacement de Java bitwise ou|
.Si vous prévoyez de l'utiliser régulièrement, créez une fonction d'extension d'intention
Vous pouvez ensuite appeler directement cette fonction avant de démarrer l'intention
Si vous avez besoin de l'option pour ajouter des indicateurs supplémentaires dans d'autres situations, ajoutez un paramètre facultatif à la fonction d'extension.
la source