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.

7voto

Bunny Points 516

Vous pouvez essayer finishAffinity() Il ferme toutes les activités en cours et fonctionne sur les systèmes Android 4.1 et ultérieurs.

6voto

Android Points 3660

Une solution possible que je peux vous suggérer est d'ajouter android:launchMode="singleTop" dans le manifeste de mon ProfilActivité . et lorsque la déconnexion est cliquée vous pouvez déconnexion en recommençant, vous LoginActivity. en vous déconnectant, vous pouvez appeler ceci.

Intent in = new Intent(Profile.this,Login.class);
                in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(in);
                finish();

6voto

madx Points 159

Pour l'API 11+, vous pouvez utiliser Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK comme ça :

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

Il effacera totalement toutes les activités précédentes et commencera une nouvelle activité.

3voto

Aristo Michael Points 150

Utilisez les éléments suivants pour activity

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

supprimer CLEAR_TASK pour l'utilisation de fragments.

J'espère que cela pourra servir à certaines personnes.

2voto

Sujal Mandal Points 64

Je suis également confronté au même problème..

dans l'activité de connexion, ce que je fais est.

    Intent myIntent = new Intent(MainActivity.this, ActivityLoggedIn.class);
    finish();
    MainActivity.this.startActivity(myIntent);  

en cas de déconnexion

   Intent myIntent = new Intent(ActivityLoggedIn.this, MainActivity.class);
   finish();
   ActivityLoggedIn.this.startActivity(myIntent);

Cela fonctionne bien mais lorsque je suis dans l'ActivityLoggedIn et que je minimise l'application et que je clique sur l'icône du bouton de lancement dans le tiroir d'applications, l'activité principale redémarre :-/ J'utilise le drapeau

android:LaunchMode:singleTask 

pour l'activité principale.

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