J'ai 2 activités: principale et liste.
Depuis Main, vous pouvez ouvrir la liste. à partir de la liste, vous pouvez ouvrir Main.
J'aimerais que chaque ouverture de la liste ne soit pas enregistrée dans "l'historique". Par conséquent, si vous appuyez de nouveau sur Main , vous ne pouvez pas revenir à la liste.
C'est possible?
Lorsque vous démarrez la liste Activity
de votre liste, définissez ses indicateurs Intent
comme suit:
Intent i = new Intent(...); // Your list's Intent
i.setFlags(i.getFlags() | Intent.FLAG_ACTIVITY_NO_HISTORY); // Adds the FLAG_ACTIVITY_NO_HISTORY flag
startActivity(i);
L'option FLAG_ACTIVITY_NO_HISTORY
empêche le nouveau Activity
d'être ajouté à la pile d'historique.
NB: Comme @Sam le fait remarquer, vous pouvez utiliser i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
à la place. Il n'y a pas de différence fonctionnelle.
Dans le fichier manifeste, ajoutez:
Android:noHistory="true"
à l'activité que vous ne voulez pas garder sur la pile.
Utilisez la nouvelle tâche avec effacement. Cela a fonctionné dans mon cas lorsque les autres options ne fonctionnaient pas.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Efface toute la pile d'historique et commence une nouvelle activité sur Android
Il semble que si vous appelez finish () sur votre activité juste après en avoir ouvert une autre, celle qui est terminée est retirée de la pile.
par exemple:
Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
Dans mon cas particulier FLAG_ACTIVITY_NO_HISTORY
n'a pas fonctionné. _ FLAG_ACTIVITY_NEW_TASK
ou FLAG_ACTIVITY_CLEAR_TASK
seuls travaillent seuls.
Toutefois FLAG_ACTIVITY_NEW_TASK
et FLAG_ACTIVITY_CLEAR_TASK
ensemble ont fonctionné.
Intent intent = new Intent(FooActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Je voulais juste ajouter un moyen de faire cela à Kotlin:
val i = Intent(this, LogInActivity::class.Java)
startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK))
Réponse tardive, mais ajoute de la profondeur à d’autres réponses. Tout se résume à ce que vous voulez faire avec les autres activités démarrées à partir de cette activité.
Option 1 - Seule cette activité ne devrait pas avoir d'antécédent d'activité d'appel
Alors juste faire:
Intent i = new Intent(...);
i.addFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
Option 2 - Toutes les activités lancées à partir de cette activité spécifique ne doivent pas avoir d'historique
Ajoutez ensuite le manifeste de l’activité d’appel:
Android:noHistory="true"
Mais si vous voulez avoir un historique dans une nouvelle activité, vous devez supprimer manuellement le drapeau:
Intent i = new Intent(...);
i.removeFlag(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(i);
J'espère que ça clarifie d'autres réponses :)
ajouter le drapeau FLAG_ACTIVITY_NEW_TASK
à votre Intent
http://developer.Android.com/reference/Android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK
Essayez FLAG_ACTIVITY_CLEAR_TOP si l'activité est déjà en cours d'exécution:
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);