2010-01-22 14 views
47

Je dois remplacer l'activité en cours 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. Selon la documentation, il semble que le meilleur moyen serait de démarrer l'activité en utilisant Activity.startActivity comme d'habitude, puis d'appeler immédiatement Activity.finish pour fermer l'activité en cours.Remplacer l'activité actuelle

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

Répondre

50

Oui. Il est bon d'utiliser api de cette façon.

+3

Est-ce que ce travail avec startActivityForResult? Si oui, où le résultat est-il publié? – nmr

+1

Pour les personnes qui s'interrogent sur la question de @ nmr, ce que j'ai fait est de démarrer la nouvelle activité pour le résultat, puis d'appeler finish() dans le onActivityResult si nécessaire. –

5

essayer d'utiliser FLAG_ACTIVITY_TASK_ON_HOME, FLAG_ACTIVITY_NEW_TASK dans les drapeaux intention

24

La bonne façon d'y parvenir utilise les éléments suivants:

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é, 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 de retour, et vous détruisez également le mangé de l'activité.

2

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

Référence PlayerActivity in ExoPlayer Demo

+0

Ceci est une chose très utile à faire si vous avez une page "Accueil" logique/fonctionnelle et que vous utilisez beaucoup de navigation (comme un tiroir de navigation) –