2015-11-02 3 views
2

J'ai une séquence d'activité lance ci-dessous:Lancer une nouvelle activité et claires activités antérieures, sauf l'activité de la maison

Activité Accueil -> 2e activité -> 3ème activité -> 4e activité

Ce que je veux atteindre est que lorsque la 3ème activité lance la 4ème activité, elle efface les activités 2 et 3 du backstack. Ainsi, un retour sur la quatrième activité revient à l'activité d'origine

, c'est-à-dire que l'utilisateur devrait toujours être capable de revenir de la 3ème activité au 2ème, mais une fois la 4ème activité lancée, les activités 2 et 3 supprimées.

Quelle est la configuration pour y parvenir?

Répondre

0

Bien que toutes les réponses ont été utiles, et que je n'avais 2 activités que je voulais fermer c'est ce que je l'ai fait:

  1. startActivityForResult() sur l'activité 2
  2. le lancement réussi de l'activité 4 sur l'activité 3 Je mis RESULT_OK avant d'appeler finish() sur l'activité 3.
  3. Activité 2, je poignée bon résultat sur onActivityResult(), de cette façon, je sais Activité 4 a été lauched, donc je peux terminer l'activité 2.

donc à la fois l'activité 2 et 3 sont fermées lors du lancement de l'activité 4

1

Je pense que la meilleure façon sera d'utiliser quelque chose comme tel:

Intent homeActivityIntent = new Intent(fourth.this, 
         home.class); 
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
homeActivityIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(homeActivityIntent); 
+0

Merci .. Donc dites-vous, je devrais remplacer le bouton de retour afin qu'il appelle commencer l'activité avec cette config? – FlashAsh99

+0

Oui, si c'est le seul pour l'utilisateur de revenir à l'activité 1. –

3

Sons comme vous voulez CLEAR_TOP.

Essayez ceci:

Intent i = new Intent(this, HomeActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 
+0

Merci .. Donc dites-vous, je devrais remplacer le bouton de retour afin qu'il appelle démarrer l'activité avec cette config? – FlashAsh99

+0

Oui, en supposant que le but du bouton de retour pour cet écran. –

2

Vous pouvez vous inscrire BroadCastReceiver en 2ème et 3ème activité qui a finish() dans sa mise en œuvre onReceive().

Déclenchez la diffusion lors de la quatrième activité.

Si cela fonctionne, déplacez la même implémentation de diffusion vers BaseClass et ajoutez une vérification booléenne pour enregistrer la diffusion ou non.

Si vous utilisez des fragments, vous pouvez essayer

+0

J'imagine que cela fonctionnerait, mais semble un peu "hacky" se demandait s'il y avait une config que je peux utiliser avec les drapeaux d'intention. – FlashAsh99

+0

Autant que je m'en souvienne, i.setFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP); ne fonctionne que si vous lancez à nouveau la 1ère activité après la 3ème activité qui efface toutes les activités du milieu et peut appeler onNewIntent().J'utilise l'approche du récepteur Broadast pour implémenter 'Logout' qui fonctionne parfaitement. – sha