Android: activité ouverte sans enregistrer dans la stack

J’ai 2 activités: Main et List.

De Main, vous pouvez ouvrir la liste; de la liste, vous pouvez ouvrir Main.

J’aimerais que chaque ouverture de List ne soit pas enregistrée dans l’histoire. Donc, si vous appuyez de nouveau sur Main, vous ne pouvez pas revenir à la liste.

C’est possible?

Lorsque vous démarrez l’ Activity votre liste, définissez ses indicateurs d’ 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’indicateur FLAG_ACTIVITY_NO_HISTORY empêche l’ FLAG_ACTIVITY_NO_HISTORY la nouvelle Activity à la stack d’historique.

NB: Comme @Sam le souligne, vous pouvez utiliser i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); au lieu. 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 stack.

Utilisez la nouvelle tâche avec effacement. Cela a fonctionné dans mon cas quand les autres options ne l’ont pas fait.

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

Effacer toute la stack d’historique et démarrer 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 supprimée de la stack.

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 ne FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TASK seuls à fonctionner.

Cependant, 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 append un moyen de faire ça à Kotlin:

 val i = Intent(this, LogInActivity::class.java) startActivity(i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)) 

ajoutez le drapeau FLAG_ACTIVITY_NEW_TASK à votre Intent

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

Réponse tardive, mais ajoute de la profondeur aux autres réponses. Tout se résume à ce que vous voulez faire avec d’autres activités lancées à partir de cette activité

Option 1 – Seule cette activité ne devrait pas avoir d’historique d’activité d’appel

Alors faites simplement:

 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 devraient pas avoir d’histoire

Ensuite, ajoutez le manifeste de l’activité appelante:

 android:noHistory="true" 

Mais si vous souhaitez 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 cela éclaircit d’autres réponses 🙂

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); 

Ne pouvez-vous pas remplacer le bouton Précédent de l’activité en question pour arrêter la fonctionnalité de «retour»?

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return super.onKeyDown(keyCode, event); }