Je suis en train de créer une application pour tablette. Dans cette application, il y a une activité avec deux fragments. Le premier fragment est un fragment de liste "connu" qui affiche une simple liste de mise en page d'un élément à partir d'une requête de base de données, le second fragment affiche les détails sur l'enregistrement sélectionné (à partir du fragment de liste). Le problème avec le deuxième fragment est que son type dépend des enregistrements montrés dans la liste. Par exemple, si les enregistrements sont des clients, les détails du client sélectionné sont affichés, si ce sont des articles d'inventaire, les détails de l'article sélectionné sont affichés, etc. Afin de communiquer avec le fragment de détails, j'ai créé une interface que chaque classe de fragment de détails met en œuvre. Le fragment liste est "fixé" dans l'activité à partir du layout xml. Le fragment de détail, quant à lui, est 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 fil d'exécution principal la prochaine fois que ce fil d'exécution 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 bien.
La question est donc la suivante : comment puis-je être sûr que fragmentTransaction.commit() a validé la transaction afin que je puisse travailler avec le fragment ajouté ? En outre, existe-t-il un moyen d'attendre que le commit se produise, puis de continuer avec le reste du code ?