250 votes

Par programmation revenir à la précédente, fragment de la backstack

Dire que j'ai une activité qui a des fragments ajoutés par programmation:

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 manière de retourner le fragment précédent qui était visible?

J'ai trouvé la fonctionnalité sur le bouton cliquez sur dans android , mais je pense simulant une touche de retour de l'événement n'est pas la bonne façon de le faire (et je ne peux pas le faire fonctionner):

dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));

Appelant finish() ferme juste l'activité qui ne m'intéressent pas.

Est-il une meilleure façon d'aller à ce sujet?

393voto

stuckless Points 2775

Regardez l' getFragmentManager().popBackStack() méthodes (il y en a plusieurs au choix)

http://developer.android.com/reference/android/app/FragmentManager.html#popBackStack()

137voto

Kyle Falconer Points 1582

Pour des précisions sur les autres réponses, c'est ma solution (placé dans une Activité):

@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        Log.i("MainActivity", "popping backstack");
        fm.popBackStack();
    } else {
        Log.i("MainActivity", "nothing on backstack, calling super");
        super.onBackPressed();  
    }
}

37voto

Jabeer Points 136

Lorsque nous mettons à Jour/ajouter les fragments,

Devrait Inclure l' .addToBackStack().

getSupportFragmentManager().beginTransaction()
                           .add(detailFragment, "detail")
                           // Add this transaction to the back stack
                           .addToBackStack()
                           .commit();

Après cela, si l'on donne au getFragments.popBackStackImmediate() retournera true si nous ajouter/mettre à jour les fragments, et revenir à l'Écran actuel.

6voto

Tarun Points 4513
getActivity().getFragmentManager().beginTransaction().remove(this).commit();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X