362 votes

Android : Effacer la pile de retour

Android, et j'ai quelques activités, disons A, B, C.

Dans Une j'utilise ce code pour ouvrir B:

Intent intent = new Intent(this, B.class);
startActivity(intent);

B-je utiliser ce code pour ouvrir C:

Intent intent = new Intent(this, C.class);
startActivity(intent);

Lorsque l'utilisateur appuie sur un bouton en C, je veux revenir à Une claire et l'arrière de la pile (à proximité à la fois B et C). Ainsi, lorsque l'utilisateur d'utiliser le bouton retour de B et C ne se montre pas, j'ai essayé le suivant:

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent);

Mais B et C sont toujours montrant si j'utilise le bouton de retour quand je suis de retour dans l'activité A. Comment puis-je éviter cela?

480voto

Jake Basile Points 3032

Essayez d'ajouter de l' FLAG_ACTIVITY_NEW_TASK comme décrit dans la documentation pour FLAG_ACTIVITY_CLEAR_TOP:

Ce mode de démarrage peut également être utilisé pour bon effet en conjonction avec FLAG_ACTIVITY_NEW_TASK: si utilisé à l' commencer à la racine de l'activité d'une tâche, il apportera en cours d'exécution instance de cette tâche à l' au premier plan, puis l'effacer de sa la racine de l'état. Ceci est particulièrement utile, par exemple, lors du lancement d'une activité à partir de la notification le gestionnaire.

Ainsi, votre code pour le lancement A serait:

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent);

183voto

diesel Points 457
<pre>intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK) ; startActivity(intent) ;</pre>

82voto

cirrus Points 278

Qu’en est-il en ajoutant

la définition de l’activité de B et C ? Ils ne seront pas ajoutés à la backstack. Vous ne savez pas si c’est ce que vous voulez.

65voto

Geng Jiawen Points 85

Cela me tracasse depuis longtemps. Enfin ça a marché en faisant ceci :

Fragment, utilisez :

Dans l’activité, utilisez (ajouter un drapeau plus intention `` comparé à fragmenter) :

31voto

Joseph Earl Points 11953
<ol> <li>Ajouter <code></code> à l’élément d’activité dans votre manifeste pour l’activité A</li> <li>Ensuite, utilisez <code></code> et <code></code> lors du démarrage activité A</li> <p>Cela signifie que lorsque l’activité A est lancée, toutes les tâches au-dessus de celui-ci sont désactivées afin que A est top. Une nouvelle pile de retour est créé avec A à l’origine et en utilisant <code></code> assure vous ne jamais lancez une fois (puisque A est maintenant sur le dessus dû à <code></code> ).</p></ol>

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