Terminer le parent et l'activité actuelle de Android
J'ai 3 activités. L'activité qui conduit à l'activité B, qui à son tour peut revenir à l'activité d'Un ou de début d'activité C. Cependant, si j'appuie sur le dos de l'activité C l'application doit fermer.
Pour résumer:
- De l'activité d'Un chantier B
- Appuyant sur Retour sur l'activité B doit conduire à Une
- Activité de démarrage B activité C
- Appuyant sur Retour sur l'activité de C doit fermer l'application
Comment dois-je aller de l'activité B to C? Ce code me donne une NullPointerException sur la dernière ligne:
Intent intent=new Intent(ActivityB.this, ActivityC.class);
startActivity(intent);
ActivityB.this.finish();
ActivityB.this.getParent().finish();
Si je passe les deux dernières lignes, je reçois aussi un pointeur null.
- Je voudrais juste souligner que le fait d'avoir l'app fermer après l'appui sur le bouton retour lorsque vous n'êtes pas sur la première page de l'application est vraiment ennuyeux. Je ne suis pas sûr de ce que vous êtes en train de faire, mais juste faire attention que les utilisateurs ne sont pas s'attendre à ce que le bouton retour aller de l'activité précédente
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si cela va fonctionner, mais vous pouvez essayer:
De l'Activité A, début de l'activité B, pour un résultat à l'aide de
startActivityForResult()
Dans l'Activité B, lorsque l'utilisateur déclenche l'Activité de C, démarrage de l'activité C.
startActivity()
retourne immédiatement, de sortedéfinir un résultat qui servira à alimenter Un pour finir ainsi,
Appel
finish()
dans B.Lorsque A reçoit que le résultat de B, les appels de
finish()
sur lui-même.À défaut, vous pourriez faire de l'Activité de C dans son propre app, puis fermer la première application (avec Un & B) après le début de la deuxième.
P. S. Prendre Falmarri commentaire en considération comme vous aller de l'avant!
Bonne chance.
Si vous voulez terminer une activité parent d'un enfant de l'activité,
Dans le parent de l'activité, alors que le déclenchement de l'enfant, utiliser la commande suivante:-
et remplacer la Méthode onActivityResult de la manière suivante:-
Maintenant, dans l'activité enfant, remplacer onStop et onDestroy de la manière suivante:-
Avis que j'ai mis la valeur 2 dans l'activité enfant, et je suis le rechercher dans l'activité parent. Si la valeur est la même que j'ai mis, puis l'activité parent fini aussi.
Ensuite, vous pouvez utiliser récursive approches pour d'autres activités.
setResult()
, activité parent est toujours à recevoir0
.onActivityResult
est appelée avantonStop
etonDestroy
, vous devezsetResult
avant.Vous shou utilisation onActivityResult méthode dans votre Activité parent
Supposons que l'Activité est Un parent de l'Activité B.
Si vous voulez cliquez sur le bouton retour de l'Activité B pour quitter l'Application (également à la sortie de l'Activité A)
Dans votre Activité B, dans
onStop()
ouonDestroy()
vous appelez
cela va passer un code de résultat de l'activité de son parent.
Votre parent Actvity Une, écoute le code de résultat
vous aurez besoin d'utiliser
onActivityResult
méthodeà l'intérieur de la méthode, vous pouvez appeler
Ça fonctionne pour moi 🙂
Je ne fait rien de tout cela. C'est comment je pourrais modifier votre code.
le code que vous utilisez pour entrer dans une autre intention:
De cette façon, vous pouvez toujours quitter en appuyant sur retour. Mais attendez! Vous pouvez changer la façon dont vous voulez que votre
retour sur une touche de réagir lorsqu'il est pressé.
Ce faire:
Rien de ce qui a fonctionné pour moi. J'ai donc trouvé une solution. L'aide clairement les listes de cette Intention.FLAG_ACTIVITY_CLEAR_TASK doit être utilisé avec l'Intention.FLAG_ACTIVITY_NEW_TASK. Voici donc un code qui a fonctionné pour moi.
essayer cette
si vous êtes en Activité et a commencé à l'Activité B.
L'activité A --> Activité B
Et veulent maintenant de fermer les deux activités.
ensuite utiliser le code ci-dessous dans l'Activité de B.
Et utiliser ce code Activité:
Dès que l'activité B de la finition, de l'Activité d'Un fini aussi.
Il ya un inconvénient, je ne sais pas peut être que vous le voulez ou non.
Inconvénient est que Si l'utilisateur est sur l'Activité de B et s/il a appuyez sur la touche retour pour se déplacer sur l'Activité A. Ensuite, l'Activité d'Un fini aussi dans ce cas.
Cela fonctionne parfaitement:
votre activité C sera la racine de l'activité et sur la presse en arrière finition du apps.
De l'écran(B) vous souhaitez démarrer l'écran(C) SANS arrière de l'écran, juste
démarrer cet écran (C) avec:
L'arrière dans screenC va quitter l'application.
De l'Activité A, début de l'activité B, pour un résultat à l'aide de startActivityForResult(intent,19)
Dans l'Activité B, lorsque l'utilisateur déclenche l'Activité de C, démarrage de l'activité C.
startActivity() retourne immédiatement, de sorte
définir un résultat qui servira à alimenter Un pour finir ainsi,
Appel finish() en B.
et Appel setResult() la méthode avant de terminer() la méthode de votre Enfant à l'Activité
En Activité Parent annuler onActivtyResult(....) la méthode.
Lorsque A reçoit que le résultat de B, les appels de finition() sur lui-même.
Vous pouvez utiliser
finishAffinity()
, elle fermera Courant & tous les Parents des Activités de l'Activité en cours.Remarque : tous les résultats de l'Activité de l'Enfant à l'Activité Parent ne seront pas traitées.
De l'espoir, ça aide !!
Ont chaque activité écouter pour un résultat à partir de la prochaine activité, et finir lui-même si cela se produit.
Vous pouvez utiliser un code de résultat pour indiquer que vous voulez l'activité à la fin.
Vous pouvez simplement remplacer le retour le comportement de la touche:
Noter que je n'appelle pas super de onBackPressed.
Cela vous permet également de remplacer le parcourir pile mécanisme pour Android, que je trouve être un grand avantage, puisque, actuellement, il ne semble pas être un moyen pour effacer le seul élément plus ancien à partir de la navigation de la pile de façon simple.
Vous pouvez terminer le parent de l'activité si nécessaire trop, mais en utilisant cette méthode, vous n'avez pas à vous inquiéter à ce sujet.
Le code suivant devrait le faire pour vous. Presque dans toutes les autres approches de votre application restera dans les applications récentes. Javadoc peut être trouvé à la, https://developer.android.com/reference/android/app/ActivityManager.AppTask.html#finishAndRemoveTask()