143 votes

Android : Supprimez toutes les activités précédentes de la pile arrière

Lorsque je clique sur Déconnexion dans mon Profil Activité à laquelle je veux amener l'utilisateur Connexion où il doit utiliser de nouvelles informations d'identification.

J'ai donc 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 du bouton de déconnexion.

Mais le problème est que lorsque je clique sur le bouton de retour de l'activité de connexion, je suis renvoyé à l'activité de profil. Je m'attendais à ce que l'application se ferme lorsque je clique sur le bouton de retour de l'activité de connexion.

Qu'est-ce que je fais mal ?

J'ai également ajouté android:launchMode="singleTop" dans le manifeste de mon Activité de connexion

Merci.

2voto

InnenTensai Points 40

Aucun des drapeaux d'intention n'a fonctionné pour moi, mais voici comment je l'ai résolu :

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'appelais finish() ; et cela fonctionne plutôt bien.

1voto

Gaurav Vashisth Points 1530

Gardez juste

Intent intent = new Intent(ProfileActivity.this,
    LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);

1voto

S.Sathya Priya Points 190

Dans le niveau 11 de l'API ou plus, utilisez FLAG_ACTIVITY_CLEAR_TASK y FLAG_ACTIVITY_NEW_TASK sur l'intention d'effacer toute la pile d'activité.

Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |  Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);

1voto

Mohammad Points 194

Essayez ceci, ça va marcher :

Intent logout_intent = new Intent(DashboardActivity.this, LoginActivity.class);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
logout_intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(logout_intent);
finish();

1voto

Gibolt Points 4072

Kotlin avancé et réutilisable :

Vous pouvez définir l'indicateur directement en utilisant la méthode setter. En Kotlin or es el remplacement pour la méthode Java bitwise ou | .

intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK

Si vous prévoyez de l'utiliser régulièrement, créez une fonction d'extension Intent.

fun Intent.clearStack() {
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

Vous pouvez alors appeler directement cette fonction avant de lancer l'intention

intent.clearStack()

Si vous avez besoin de la possibilité d'ajouter des drapeaux supplémentaires dans d'autres situations, ajoutez un paramètre facultatif à la fonction d'extension.

fun Intent.clearStack(additionalFlags: Int = 0) {
    flags = additionalFlags or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

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