Effacer toute la pile de l'historique et démarrer une nouvelle activité sur Android


Answers

Cas 1: Seulement deux activités A et B:

Ici, le flux d'activité est A-> B. En cliquant sur le bouton retour de B, nous devons fermer l'application puis en démarrant l'activité B de A, appelez finish () cela empêchera Android de stocker l'activité A dans le Backstack.eg pour l'activité A est Loding / Splash écran d'application.

Intent newIntent = new Intent(A.this, B.class);
startActivity(newIntent);
finish();

Cas 2: Plus de deux activités:

S'il y a un flux comme A-> B-> C-> D-> B et en cliquant sur le bouton de retour dans l'activité B en venant de l'activité D. Dans ce cas, nous devrions utiliser.

Intent newIntent = new Intent(D.this,B.class);
newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newIntent);

Ici, l'activité B sera démarrée à partir du backstack plutôt que d'une nouvelle instance à cause de Intent.FLAG_ACTIVITY_CLEAR_TOP et Intent.FLAG_ACTIVITY_NEW_TASK efface la pile et en fait la première. Ainsi, lorsque nous appuyons sur le bouton back, toute l'application sera terminée.

Question

Est-il possible de démarrer une activité sur la pile, en effaçant toute l'histoire avant elle?

La situation

J'ai une pile d'activité qui va soit A-> B-> C ou B-> C (l'écran A sélectionne le jeton des utilisateurs, mais beaucoup d'utilisateurs n'ont qu'un seul jeton).

Dans l'écran C, l'utilisateur peut prendre une action qui rend l'écran B invalide, de sorte que l'application veut les prendre à l'écran A, qu'elle soit déjà dans la pile. L'écran A devrait alors être le seul élément de la pile dans mon application.

Remarques

Il y a beaucoup d'autres questions similaires, mais je n'ai rien trouvé qui réponde à cette question précise. J'ai essayé d'appeler getParent().finish() - cela entraîne toujours une exception de pointeur nul. FLAG_ACTIVITY_CLEAR_TOP ne fonctionne que si l'activité est déjà dans la pile.




Immédiatement après avoir démarré une nouvelle activité, en utilisant startActivity , veillez à appeler finish() afin que l'activité en cours ne soit pas empilée derrière la nouvelle.




Parfois, votre émulateur Android peut échouer à connecter l'outil eclipse DDMS et demander à adb de démarrer manuellement. Dans ce cas, vous pouvez démarrer ou arrêter l'adb en utilisant l'invite de commande.




Intention i = nouvelle intention (MainPoliticalLogin.this, MainActivity.class); i.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                        startActivity(i);



Avec la version la plus finishAffinity() Android> = API 16, utilisez finishAffinity()

L'approche convient à> = API 16.

Intent mIntent = new Intent(mContext,MainActivity.class);
finishAffinity();
startActivity(mIntent);
  • C'est la même chose que de commencer une nouvelle activité, et effacer toute la pile.
  • OU Redémarrez sur MainActivity / FirstActivity.





Related