Android: Vider la pile de retour
Android, et j'ai quelques activités, disons A, B, C.
En Un, j'utilise ce code pour ouvrir B:
Intent intent = new Intent(this, B.class);
startActivity(intent);
En B, j'utilise 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?
- Découvrez la réponse [cliquez ici][1] Peut-être que des astuces vont vous aider. [1]: stackoverflow.com/questions/12403364/...
- Il est très utile pour moi...... L'essayer... [cliquez Ici][1] [1]: stackoverflow.com/a/4376616/1318946
- Double Possible de Effacer l'intégralité de l'histoire de la pile et de commencer une nouvelle activité sur Android
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter
FLAG_ACTIVITY_NEW_TASK
comme décrit dans la documentation pourFLAG_ACTIVITY_CLEAR_TOP
:De sorte que votre code pour lancer
A
serait:intent.addFlags(int)
, qui fait le travail pour moi. Je pariesetFlags
remplace la précédente drapeaux, de sorte que seuleNEW_TASK
devenait ajouté.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
addFlags
passetFlags
, compris à la dure. Également ajoutéIntent.FLAG_ACTIVITY_NEW_TASK
Intent intent = new Intent(this, A.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
CLEAR_TOP
drapeau - cette combinaison est le SEUL qui a complètement effacé l'ensemble de la pile et de la nouvelle activité le seul dans l'application. Merci!!!!Qu'en ajoutant dans le fichier manifeste de l'activité :
à la définition de l'activité de a, B et C ? Ils ne seront pas ajoutés à la backstack. Pas sûr si c'est ce que vous voulez.
Ce qui me dérange pendant une longue période .Enfin j'ai travaillé dessus en faisant ceci:
Du fragment,de l'utilisation:
De l'Activité,de l'utilisation(ajouter une intention drapeau
Intent.FLAG_ACTIVITY_CLEAR_TASK
par rapport au fragment):android:launchMode="singleTop"
à l'activité de l'élément dans votre manifeste pour l'Activité d'Unintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
etintent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
lors du démarrage de l'Activité d'UnCela signifie que lorsque l'Activité est lancée, toutes les tâches sur le dessus de celui-ci sont effacées pour Un, c'est top. Une nouvelle pile de retour est créé à la racine, et à l'aide de
singleTop
vous garantit de ne jamais lancer Une fois (depuis Un dessus en raison de..._CLEAR_TOP
).De départ de l'API de 16 (Jelly Bean), vous pouvez les appeler
finishAffinity()
.Maintenant, vous pouvez également appeler
ActivityCompat.finishAffinity(Activity activity)
avec la bibliothèque de compatibilité.Assurez-vous de définir taskAffinity dans le manifeste pour un nom de package unique pour ce groupe d'activités.
Voir pour plus d'info:
http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html#finishAffinity%28android.app.Activity%29
Essayez d'utiliser
et pas
Si votre application possède un minimum de sdk de la version 16, alors vous pouvez utiliser
finishAffinity()
Terminer cette activité ainsi que toutes les activités immédiatement au-dessous de la tâche en cours qui ont la même affinité.
C'est un travail pour moi
En Haut écran de Paiement de supprimer tous les arrière-pile activits,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
Comme par Wakka dans Retrait d'une activité à partir de l'histoire de la pile...
Ajouter
android:noHistory="true"
attribut à votre<activity>
dans leAndroidManifest.xml
comme ceci:De recherche pour l'avenir, essayez ce code.
Utilisation finishAffinity(); dans la tâche C lors du démarrage d'Une tâche pour effacer backstack activités.
J'ai trouvé une solution intéressante qui pourrait vous aider. Je l'ai fait dans mon
onBackPressed()
méthode.FinishAffinity
supprime la connexion de l'activité existante de sa pile. Et puis la finition vous permet de quitter cette activité. Qui finira par quitter l'application.Utiliser ce code pour le démarrage d'une nouvelle Activité et de fermer ou de détruire toutes les autres activité de la pile ou de la pile de retour.
J'ai trouvé les réponses ici un peu trompeur, car le code dans la question d'origine semble bien fonctionner pour moi?
A étant la racine de l'activité, à partir de B ou C seulement avec FLAG_ACTIVITY_CLEAR_TOP ne retirez B et C à partir de la pile de retour.
Dans kotlin c'est presque la même, comme java. Seulement | symbole est remplacé par ou texte.
Donc, il est écrit comme-
J'ai essayé toutes les solutions et aucune n'a fonctionné individuellement pour moi.
Ma Solution est :
Déclarer
Activity A
commeSingleTop
en utilisant[android:launchMode="singleTop"]
dans le manifeste Android.Maintenant ajouter les options suivantes lors du lancement de
A
à partir de n'importe où. Il va effacer la pile.Intent.FLAG_ACTIVITY_CLEAR_TOP
ne fonctionnera pas dans ce cas. Veuillez utiliser(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
Pour plus de détails, s'il vous plaît vérifier cette de la documentation.
Il me semble que vous avez besoin pour commencer
Activity C
deActivity B
en utilisantstartActivityForResult()
. Lorsque vous cliquez sur un bouton dansActivity C
, appelsetResult(RESULT_OK)
etfinish()
doncActivity C
est terminé. DansActivity B
, vous pourriez avoir laonActivityResult()
aussi appelfinish()
sur lui-même, et il vous serait alors ramené àActivity A
.de déconnexion.addFlags(Intention.FLAG_ACTIVITY_CLEAR_TASK);
fermeture de la session.addFlags(Intention.FLAG_ACTIVITY_NEW_TASK);
Vous pouvez utiliser cet exemple pour appeler votre
Activity A
deActivity C
Intent loout = new Intent(context, LoginActivity.class);
loout.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(loout);
pour moi, l'ajout de
Intent.FLAG_ACTIVITY_CLEAR_TASK
résolu le problèmeEn plus de
FLAG_ACTIVITY_CLEAR_TOP
, vous pourriez essayer d'ajouterIntent.FLAG_ACTIVITY_SINGLE_TOP
ainsi:intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Le code fonctionne correctement. J'ai essayé dans le Cycle de Vie des Applications de l'échantillon.
Je n'ai pas de B et C dans la pile de retour après le démarrage de l'activité avec le drapeau, FLAG_ACTIVITY_CLEAR_TOP
j'ai appelé
activity_name.this.finish()
après le démarrage de nouveaux intention et cela a fonctionné pour moi.Mais il ne fonctionne pas pour moi... je ne dis pas que cette solution pour l'utiliser, mais si le paramètre d'indicateur de ne pas travailler pour vous que vous pouvez l'essayer..Mais encore je vous recommande de ne pas utiliser
De ne PAS ajouter de l'Histoire de Drapeau dans l'intention.
Dans l'activité B, début de l'activité C comme ci-dessous >>>>>>
Dans le manifeste
et
Soit l'ajouter à votre
Activity B
etActivity C
ou
Override
onBackPressed
fonction pour éviter le retour de la pression avec unreturn
.Utilisation setFlags() méthode pour effacer dos ouvert toute l'activité de la fermer et démarrer yourActvity
Cela a fonctionné pour moi avec onBackPressed:
Kotlin exemple:
C'est comment j'ai résolu le problème:
Ce code fonctionne pour moi en kotlin:
C'est vraiment une vieille réponse et je n'ai pas vraiment trouvé une bonne solution pour elle, pour les seules fins de la compensation de la backStack, j'ai décidé de créer mon propre backstack, qui n'est même pas une pile de tbh, mais il n'a pas à être, puisque nous voulons effacer tout cela de toute façon;
Theres une surcharge de handlind la backstack à chaque fois, mais il m'a donné le contrôle j'avais besoin;
D'abord Déclarer un public static Liste des Activités (ou des fragments, ce que vous avez besoin);
Et à l'intérieur de toutes les autres activités de la méthode onCreate:
Et enfin, lorsque vous voulez effacer la backstack, il suffit d'appeler: