J'ai un code client. Il n'y a qu'une seule activité pour tous les fragments, c'est-à-dire que la seule activité est de gérer tous les fragments.
Cette activité contient le code suivant pour tout fragment à la fin de la méthode de ce fragment-
Par exemple - fragment MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Alors,
1) Quelle est la signification de addToBackStack(null)
suivi d'un commit()
?
2) Pourquoi devez-vous passer un paramètre nul à addToBackStack
?
3) Comment obtenir ce fragment après avoir été ajouté comme ça?
On dirait que ce code est inutile car j'ai exécuté le code sans la dernière ligne .addToBackStack(null).commit()
et il a fonctionné sans aucun problème.
android
android-fragments
Mon Dieu
la source
la source
Réponses:
Citant des documents:
L'ordre dans lequel vous ajoutez des modifications à une FragmentTransaction n'a pas d'importance, sauf:
Vous devez appeler en
commit()
dernier. Si vous ajoutez plusieurs fragments au même conteneur, l'ordre dans lequel vous les ajoutez détermine l'ordre dans lequel ils apparaissent dans la hiérarchie des vues.Il faut donc s'engager à la fin.
Il n'a pas besoin d'être nul, cela peut être une chaîne. Si vous ne le souhaitez pas, transmettez simplement null.
Concernant:
Si vous souhaitez accéder au fragment précédent, ajoutez-le à backstack. Cela dépend donc si vous souhaitez ajouter le fragment à la backstack.
Vous disposez déjà de l'instance de fragment
firstFragment
. Donc je ne sais pas ce que vous entendez par obtenir le fragment plus tard.Plus d'information @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
la source
getFragmentManager().popBackStackImmediate()
si le bouton retour peut le faire seul avec / sans passage de paramètre? Voir la réponse de - stackoverflow.com/questions/21156153/…La
tag
chaîne inaddToBackStack(String name)
donne un moyen de localiser la pile arrière pour une pop ultérieure directement à cet emplacement. Il voulait être utilisé dans la méthodepopToBackStack(String name, int flags)
:En d'autres termes, il fera apparaître votre pile arrière jusqu'à ce qu'il trouve le fragment qui a été ajouté par le
name
inaddToBackStack(String name)
.Par exemple, si vous effectuez une série d'ajouts ou de remplacements au gestionnaire de fragments en donnant les noms "frag1", "frag2", "frag3", "frag4" et que vous souhaitez ultérieurement revenir directement au fragment 2 ajouté avec addToBackStack (" frag2 "), vous appelez
popToBackStack("frag2", 0)
.Alors,
Utilisation
.addToBackStack("fragName")
: si vous souhaitez ultérieurementpopToBackStack(String name, int flags)
faire apparaître plus d'une pile arrière.Utilisation
.addToBackStack(null)
: Si vous ne voulez pas faire apparaître plus d'une pile arrière plus tard, mais que vous voulez quand même en faire apparaître une à la fois. Faites cela même si vous n'appelez pas explicitement popToBackStack (), mais laissez à la place l'implémentation par défaut back press gérer la pile arrière.Utilisation
.disallowAddToBackStack()
: Si vous ne voulez pas appuyer sur le dos ou appeler popBackStack () explicitement. Il s'assurera qu'aucune partie du code n'utilise .addToBackStack ().la source
Vos réponses sont obsolètes. Si vous ne souhaitez pas ajouter de fragments à la pile arrière, vous devez utiliser l'extrait de code ci-dessous:
Ci-dessous, vous avez un exemple mignon de son utilisation:
la source
disallowAddToBackStack
, tous les futurs appels à addToBackStack lèveront IllegalStateException. Si addToBackStack a déjà été appelé, cette méthode lèvera IllegalStateException.