web-dev-qa-db-fra.com

Remplacer l'activité en cours

Je dois remplacer l'activité actuelle par une nouvelle. En d'autres termes, je souhaite démarrer une nouvelle activité et supprimer l'activité en cours de la pile de tâches.

Sur la base de la documentation, il semble que le meilleur moyen serait de commencer l'activité en utilisant Activity.startActivity comme d'habitude, puis d'appeler Activity.finish pour fermer immédiatement l'activité en cours.

Est-ce une utilisation valide de ces API ou devrais-je faire autre chose?

53
Richard Szalay

Oui. C'est bien d'utiliser api de cette façon. 

55
Tushar

Pour y parvenir, utilisez les méthodes suivantes:

Intent intent = new Intent(this,MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
this.finish();

Le code suppose que vous êtes dans une activité, sinon, si vous utilisez des fragments, utilisez getActivity ()

De cette façon, l'activité est démarrée, vous définissez correctement votre hiérarchie pour votre bouton Précédent et vous détruisez également l'activité appropriée.

27
Jeremie

essayez d'utiliser FLAG_ACTIVITY_TASK_ON_HOME, FLAG_ACTIVITY_NEW_TASK dans les indicateurs d'intention

5
user838411

Vous pouvez ajouter Android: launchMode = "singleInstance" dans votre activité, puis remplacer la méthode onNewIntent pour mettre à jour la date.

Référence PlayerActivity dans ExoPlayer Demo

4
Fangming Cheng

Vous pouvez utiliser FLAG_ACTIVITY_CLEAR_TASK lorsque vous démarrez l'activité. J'ai également défini le launchMode pour mon activité dans le manifeste comme étant singleTask, mais c'était parce que je voulais ce comportement pour la nouvelle activité. Je pense que vous pouvez obtenir ce que vous voulez en ce qui concerne la suppression de l'activité précédente, indépendamment de ce que vous utilisez pour launchMode avec votre nouvelle activité, tant que vous passez à startActivity l'indicateur FLAG_ACTIVITY_CLEAR_TASK. 

0
Andy Weinstein