Comme le titre l'indique, Pourquoi intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
ou intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
ne fonctionnera pas?
J'ai 3 activités disons A, B et C.
Lorsque j'essaie de lancer l'activité A à partir de C avec du code:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Il démarre simplement l'activité A mais n'efface pas le sommet.! -_-
J'ai également essayé d'utiliser setFlags()
.
J'ai lu différentes questions sur SO à propos de ce problème, mais je n'ai pas trouvé la bonne réponse.> _ <
Aidez quelqu'un!
Modifier
Code pour onBackPressed () dans l'activité 'A' comme demandé par @codeMagic.
@Override
public void onBackPressed(){
if(wvLogin.canGoBack())
wvLogin.goBack();
else
super.onBackPressed();
}
Dans la documentation de FLAG_ACTIVITY_CLEAR_TOP :
Si défini, et que l'activité en cours de lancement est déjà en cours d'exécution dans la tâche en cours , puis au lieu de lancer une nouvelle instance de cette activité, toutes les autres activités en plus de cela sera fermé et cette intention sera livrée à l'ancienne activité (maintenant en haut) en tant que nouvelle intention.
Comme vous l'avez ajouté dans votre commentaire, l'activité A a été terminée avant d'appeler B, donc cette situation ne s'applique pas. Une nouvelle instance de l'activité A sera lancée à la place.
Selon moi, vous avez deux options ici:
1) Utilisez les drapeaux Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
. Cela démarrera l'activité A en tant que racine de la pile. Cela fonctionne, mais toutes les autres activités de la pile seront perdues. En supposant que A était la première activité (ou du moins, que vous n'êtes intéressé par aucune des activités précédentes dans la pile des tâches), cela n'a pas d'importance. Remarque: CLEAR_TASK nécessite l'API niveau 11.
2) Une autre solution possible (au cas où l'hypothèse précédente ne serait pas vraie) serait de ne pas utiliser du tout d'indicateurs d'intention:
startActivityForResult()
.B.afterActivityResult()
, terminez B et lancez A.Vous manquez le Intent.FLAG_ACTIVITY_SINGLE_TOP
drapeau
Essaye ça:
Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
Vous avez utilisé une intention différente: utilisez celle que vous avez initialisée:
Intent i = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\WRONG;;
startActivity(i);
solution:
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); \\RIGHT;;
Vous pouvez soit mettre un noHistory fidèle à l'activité A dans le manifeste
Android:noHistory=true