Que signifie addToBackStack avec le paramètre null?

j'ai un code client. Il n'y a qu'une seule activité pour tous les fragments, c'est-à-dire que la seule activité consiste à gérer tous les fragments.

Cette activité contient le code suivant pour n'importe quel fragment de la méthode en fin de ce fragment-

par exemple - fragment MoreFragment:

MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();

Donc,

1) Quelle est la signification de addToBackStack(null) suivi de commit() ?

2) Pourquoi vous devez passer un paramètre nul à addToBackStack ?

3) Comment obtenir ce fragment après avoir été ajouté comme ceci ?

Semble que ce code est inutile que j'ai couru le code sans la dernière ligne .addToBackStack(null).commit() et il a fonctionné sans aucun problème.

47
demandé sur My God 2014-04-10 14:08:34

2 réponses

que signifie addToBackStack (null) suivi d'un commit ()?

citant docs

en appelant addToBackStack(), le mouvement remplacer est sauvegardé sur le pile arrière de sorte que l'utilisateur peut inverser la transaction et ramener le précédent fragment en appuyant sur le bouton Back.

si vous ajoutez plusieurs changements au mouvement (comme un autre add() ou remove ()) et call addToBackStack (), puis toutes les modifications appliquer avant d'appeler commit () sont ajoutés à la pile arrière comme un simple transaction et le bouton Retour inverse tous ensemble.

L'ordre dans lequel vous ajoutez les modifications apportées à un FragmentTransaction n'a pas d'importance, sauf:

Vous devez appeler commit() dernier Si vous ajoutez plusieurs fragments au même conteneur, alors l'ordre dans lequel vous les ajoutez détermine l'ordre dans lequel ils apparaissent dans la hiérarchie de la vue.

vous avez donc commis Dernière.

pourquoi vous devez passer un paramètre null à addToBackStack ?

Il n'a pas besoin d'être nul, il peut être une chaîne de caractères. Si vous ne voulez pas juste de passer la valeur null

public abstract FragmentTransaction addToBackStack (String name)

ajouté au niveau 11 de L'API Ajoutez cette transaction à la pile arrière. Cela signifie que la transaction sera souvenu après qu'il est commis, et inverse son fonctionnement quand, plus tard sauté en dehors de la pile.

Paramètres nommez un nom optionnel pour cet état de la pile de retour, Ou null.

concernant:

Semble que ce code est inutile que j'ai couru le code sans le dernier ligne. addToBackStack (null).commit() et il a fonctionné sans aucun problème

Si vous voulez naviguer fragment précédent l'ajouter à la backstack. Donc ça dépend si vous voulez ajouter le fragment dans le dos.

Comment obtenir ce fragment après avoir ajouté comme cela ?

vous avez déjà l'instance de fragment firstFragment. Donc je ne sais pas ce que vous voulez dire par obtenir le fragment plus tard

Plus d'informations @

http://developer.android.com/guide/components/fragments.html

http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)

71
répondu Raghunandan 2018-01-29 08:31:41

vos réponses sont dépréciées. Si vous ne voulez pas ajouter de fragments à la pile arrière, vous devez utiliser l'extrait de code ci-dessous:

    public static void replaceFragment (@NonNull FragmentManager fragmentManager,
            @NonNull Fragment fragment,int frameId){

        checkNotNull(fragmentManager);
        checkNotNull(fragment);
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(frameId, fragment);
        transaction.disallowAddToBackStack(); // <-- This makes magic!
        transaction.commit();
    }

Belowe vous avez mignon exemple comment l'utiliser:

GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion);
ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);
1
répondu EliaszKubala 2016-12-21 13:35:38