2017-10-12 8 views
1

Je suis en train de remplacer le fragment dans un conteneur. Pour le visuel, je peux voir un changement et le nouveau fragment est initialisé. Mais si je vérifie, quel objet dans le conteneur est, il me donne toujours l'ancien fragment que je remplace avant, le conduit au problème, que je ne peux pas appeler une méthode du nouveau fragment parce qu'il n'a pas été remplacé à 100%.
Voici mon code:
Android Fragment n'est en fait pas remplacé

fragmentTransaction = getFragmentManager().beginTransaction(); 
    Volumefragment volumefragment = new Volumefragment(); 
    System.out.println("Change Fragment"); 
    fragmentTransaction.replace(R.id.framecontainer,volumefragment); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
    if(getFragmentManager().findFragmentById(R.id.framecontainer) instanceof Dummyfragmenet){ 
     System.out.println("Wrong object"); 
    } 
} 

Répondre

3

Lorsque vous effectuez une commettez avec la transaction Fragment, ce que vous faites vraiment est la planification du remplacement de ce fragment. Cela n'arrivera pas immédiatement, et il sera remplacé lorsque le thread de l'interface utilisateur sera prêt à le faire. Donc, votre impression est appelée lorsque la transaction de fragment n'est pas complètement terminée (puisque cela se produit de manière asynchrone). Si vous voulez vous assurer que le fragment a été remplacé, juste après la validation et avant l'impression, ajouter ce qui suit:

getFragmentManager().executePendingTransactions() 

Pour obtenir des éclaircissements et pris de la documentation « Après un FragmentTransaction est engagé avec FragmentTransaction. commit(), il est programmé pour être exécuté de manière asynchrone sur le thread principal du processus. " Visiter https://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()