J'ai un fragment dans une activité que j'utilise comme tiroir de navigation. Il contient des boutons qui, lorsqu'on clique dessus, démarrent de nouvelles activités (startActivity à partir d'un fragment appelle simplement startActivity sur l'activité en cours).
Pour la vie de moi, je n'arrive pas à comprendre comment je finirais l'activité actuelle après en avoir commencé une nouvelle.
Je cherche à réaliser quelque chose comme ça dans le fragment:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Mais il semble que Fragment.class n'implémente pas finish () (comme il implémente startActivity (...)).
Je souhaite que la backstack d'activité soit effacée lors du lancement de la 2ème activité. (Donc, repousser la nouvelle activité les ramènerait techniquement dans le lanceur)
getActivity()
peut êtrenull
dans certains cas. Que devrions-nous faire alors?finish
.Eh bien en fait ...
Je ne voudrais pas que le fragment essaie de terminer l'activité. Cela place trop d'autorité sur le Fragment à mon avis. Au lieu de cela, j'utiliserais le guide ici: http://developer.android.com/training/basics/fragments/communicating.html
Demandez au fragment de définir une interface que l'activité doit implémenter. Appelez l'activité, puis laissez l'activité décider quoi faire des informations. Si l'activité souhaite se terminer, elle le peut.
la source
Comme mentionné par Jon F Hancock , c'est ainsi qu'un fragment peut «fermer» l'activité en suggérant la fermeture de l'activité. Cela rend le fragment portable comme c'est la raison pour eux. Si vous l'utilisez dans une autre activité, vous ne voudrez peut-être pas fermer l'activité.
Le code ci-dessous est un extrait d'une activité et d'un fragment qui a un bouton d'enregistrement et d'annulation.
PlayerActivity
PlayerInfoFragment, qui contient une interface que l'activité appelante doit implémenter.
la source
Chaque fois que j'utilise la finition pour fermer le fragment, toute l'activité se ferme. Selon la documentation, les fragments doivent rester aussi longtemps que l'activité parent persiste.
Au lieu de cela, j'ai trouvé que je pouvais modifier les vues de l'activité parente en utilisant cette instruction: setContentView (R.layout.activity_main);
Cela me ramène à l'activité des parents.
J'espère que cela aidera quelqu'un d'autre qui pourrait le rechercher.
la source
Très simple...
1- il suffit de saisir l'activité
getActivity()
dans le fragment2- puis appelez
finish();
Alors
getActivity().finish();
va juste terminer l'activité des parents.la source
Vous devez utiliser la méthode getActivity () pour terminer l'activité à partir du fragment.
la source
Dans Fragment, utilisez getActivity.finishAffinity ()
Cela supprimera également tous les fragments poussés par l'activité actuelle de la pile avec l'activité ...
la source
Essaye ça. Il ne devrait y avoir aucun avertissement ...
la source
15 juin 2020 - Réponse mise à jour.
Vous avez deux options pour Java et Kotlin. Cependant, la logique des deux manières est la même. Vous devez appeler activité après avoir appelé la méthode finish () .
Si votre activité ne peut pas être nulle, utilisez Answer_1 . Cependant, si votre activité peut être nulle , utilisez Answer_2 .
@canerkaseler
la source
oui
Fragment.class
ne met pas en œuvrefinish()
Lorsque vous travaillez avec des fragments, au lieu de l'utiliser ou de vous référer au contexte, utilisez toujours
getActivity()
. Tu devrais appelerla source