Disons que j'ai une activité qui a des fragments ajoutés par programme:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Quelle est la meilleure façon de revenir au fragment précédent qui était visible?
J'ai trouvé la fonctionnalité de déclenchement du bouton de retour sur le clic de bouton dans Android, mais je pense que simuler un événement de touche arrière n'est pas la bonne façon de procéder (et je ne peux pas non plus le faire fonctionner):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
L'appel finish()
ferme simplement l'activité qui ne m'intéresse pas.
Y a-t-il une meilleure façon de procéder?
android
android-fragments
back-stack
Aske B.
la source
la source
getFragmentManager().popBackStackImmediate();
a fait l'affaire. Merci.Pour développer les autres réponses fournies, voici ma solution (placée dans une Activité):
la source
fm.getBackStackEntryCount() > 1
pour rappeler l'activité alors qu'il n'y a que le premier fragment dans la pile.Lorsque nous mettons à jour / ajoutons les fragments,
Devrait inclure le
.addToBackStack()
.Après cela, si nous donnons le
getFragments.popBackStackImmediate()
retourne vrai si nous ajoutons / mettons à jour les fragments et revenons à l'écran actuel.la source
Ajoutez ces lignes à votre méthode onBackPressed (). La méthode popBackStackImmediate () vous ramènera au fragment précédent si vous avez un fragment sur la pile arrière `
"
la source
Cette solution fonctionne parfaitement pour la navigation de fragments basée sur la barre inférieure lorsque vous souhaitez fermer l'application lorsque vous appuyez à nouveau sur le fragment principal.
D'un autre côté, lorsque vous ouvrez le fragment secondaire (fragment en fragment) qui est défini comme "DetailPizza" dans mon code, il retournera l'état précédent du fragment primaire. À votre santé !
Les activités intérieures sur le dos pressé mettent ceci:
Et lancez l'autre fragment comme ceci:
la source
Ces réponses ne fonctionnent pas si je n'ai pas addToBackStack () ajouté à ma transaction de fragment mais, vous pouvez utiliser:
de votre tout fragment pour revenir en arrière;
la source
Revenez par programme au fragment précédent en utilisant le code suivant.
la source
Pour faire revenir ce fragment, ajoutez simplement ce fragment au backstack sur lequel vous souhaitez revenir appuyé, par exemple:
Dans le cas ci-dessus, j'ouvre
LoginFragment
lorsque l'Button button
on appuie sur, en ce moment l'utilisateur est dedansSignupFragment
. Donc, siaddToBackStack(TAG)
est appelé, oùTAG = "SignupFragment"
, puis lorsque le bouton retour est enfoncéLoginFragment
, nous revenons àSignUpFragment
.Codage heureux!
la source
En ajoutant
fragment_tran.addToBackStack(null)
le dernier fragment, je peux revenir sur le dernier fragment.ajout d'un nouveau fragment :
la source
Je suis venu ici à la recherche de la même idée, et en attendant, j'ai trouvé ma propre idée, qui, je crois, n'est pas si mauvaise et fonctionne si avec ViewPager.
Donc, ce que j'ai fait, c'est remplacer la méthode onBackPressed dans l'activité parent qui contient le viewPager, et le configurer pour toujours revenir en arrière de la position 1 jusqu'à ce qu'il atteigne le premier fragment, puis ferme l'activité.
Cela peut avoir des inconvénients, comme si cela ne remonte que dans un sens à chaque fois, donc cela pourrait ne pas fonctionner très bien s'il y a des onglets et que vous changez de position avec des fragments ignorés, (passer de 0 à 2, puis appuyer sur en arrière vous mettrait sur 1, au lieu de 0)
Pour mon cas, avec 2 fragments dans viewPager sans onglets, il fait bien le travail.
la source
Essayez le code ci-dessous:
la source