Android FragmentTransaction commit Quand?

Je construis une application tablette. Dans cette application, il y a une activité avec deux fragments. Le premier fragment est un fragment de liste “connu” qui affiche une liste simple de disposition d’élément à partir d’une requête de firebase database. Le second fragment affiche les détails concernant l’enregistrement sélectionné (à partir du fragment de liste). La pensée avec le deuxième fragment est que son type dépend des enregistrements affichés dans la liste. Par exemple, si les enregistrements sont des clients, les détails du client sélectionné sont affichés, s’il s’agit d’articles d’inventaire, les détails de l’article sélectionné sont affichés. Pour communiquer avec le fragment de détails Le fragment de liste est “corrigé” dans l’activité à partir du fichier XML de présentation. Le fragment de détail est cependant créé lors de la création de l’activité comme ceci:

super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ... FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); ... myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); .... } 

Le problème avec ce code est que myDetailsFragment est toujours nul. Cela est dû au fait que fragmentTransaction.commit () ne s’exécute pas immédiatement mais se produit sur le thread principal la prochaine fois que le thread est prêt (comme l’indique la documentation Android).

Si je crée le fragment de détail dans onStart () et instancie le fragment de liste dans onCreate, tout fonctionne correctement.

La question est donc la suivante: comment puis-je être sûr que fragmentTransaction.commit () a validé la transaction pour que je puisse travailler avec le fragment ajouté? En outre, y a-t-il un moyen d’attendre que le commit se produise, puis de continuer avec le rest du code?

Essayez de lancer fragmentManager.executePendingTransactions() après avoir validé votre transaction, mais avant de rechercher par tag et voir si cela fonctionne pour vous.

Dans Android API 24, FragmentTransaction a la .commitNow() synchrone .commitNow() . C’est dans la référence maintenant: https://developer.android.com/reference/android/app/FragmentTransaction.html#commitNow ()

Au contraire, .commit() fonctionne de manière asynchrone. Il ne fait que planifier un commit de la transaction.

“…. pour que je puisse travailler avec le fragment ajouté ? En outre, y a-t-il un moyen d’attendre que le commit se produise et de continuer avec le rest du code ?”

Tout dépend du travail que vous voulez faire. À partir de votre question, je constate que la plupart de votre code de travail doit figurer dans votre code fragmentaire, par exemple lorsqu’un élément d’inventaire est sélectionné.

Sur le rappel, lorsqu’un élément de la liste de sélection est sélectionné (afin de changer le fragment de détails), vous serez en mesure de saisir le fragment de manière suffisamment confortable.

De plus, vous avez déjà le fragment du retour de FragmentsPool.getHelperFileFragment(501), donc je ne vois pas pourquoi vous devez obtenir le fragment via sa balise.

Je suis intéressé de savoir quel travail vous devez faire dans onCreate avec votre fragment de détails ajouté.