Dans mon application, j'ai ListFragment
:Comment s'assurer qu'il n'y a pas de transaction FragmentTransaction simultanée?
Fragment fragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(resId, fragment, "tag");
transaction.addToBackStack("tag");
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();
Lorsque les robinets utilisateur bouton Actualiser, il mettra à jour la liste:
Fragment newFragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment oldFragment = fragmentManager.findFragmentByTag(tag);
transaction.remove(oldFragment);
fragmentManager.popBackStack();
transaction.replace(resId, newFragment, "tag");
transaction.addToBackStack("tag");
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.commit();
Il enlèvera l'ancien fragment de la pile et la volonté ajoutez le nouveau fragment dedans.
Le problème est que si l'utilisateur appuie sur le bouton Refresh très rapidement, cela peut provoquer un problème de superposition, dont l'ancien fragment n'est pas supprimé du conteneur de fragments. Je suppose que c'est un problème de concurrence.
Si oui, existe-t-il un moyen de "verrouiller" la transaction, de sorte que l'autre transaction attende jusqu'à ce que la transaction précédente soit terminée?
Ne vaudrait-il pas mieux rafraîchir les données de la liste plutôt que de créer un tout nouveau fragment? Créer un nouveau fragment à chaque fois semble un peu inutile ... – ebarrenechea