0

J'ai deux fragments - A et B - les deux fragments occupent tout l'écran. Quand je charge mon activité, je montre le fragment d'utilisateur A tandis qu'en arrière-plan je charge le fragment B (dans le gestionnaire de fragment je remplace sur le fragment A puis sur le fragment B que j'ajoute et cache). Les deux fragments ont des dispositions relativement similaires (ou du moins il serait juste de dire que la disposition de A juste avant la transition est similaire à la mise en page de départ de B - se déplacer) et quand je veux passer de A à BI faire un "show" sur B et "hide" sur A. Cela fonctionne presque parfaitement, mais vous pouvez encore voir un court éclair de blanc entre les deux, avant que B ne soit montré, et cela ruine l'illusion que les deux sont le même fragment. Comment puis-je effectuer une transition sans que l'utilisateur ne s'en aperçoive? Quelques mots d'explication sur la raison pour laquelle il y a deux fragments et pas un seul - la logique métier est distincte. Chaque fragment traite d'une partie différente du flux et cela n'aurait aucun sens de les combiner.Android: comment passer d'un fragment à un autre sans que l'utilisateur s'en aperçoive?

choses que j'ai essayé jusqu'à présent:

• comme je l'ai dit plus haut, j'ai essayé d'ajouter B en arrière-plan et de faire seulement un « spectacle » là-dessus quand il est nécessaire - pour enregistrer tout le temps d'installation

• J'ai essayé redéfinissant la transition dans l'attente et de mettre un fadeout/fadein, mais il n'a fait aucune différence

• J'ai essayé cacher Fragmenta au lieu de l'enlever lors de l'affichage fragmentB, mais il n'a fait aucune différence

• J'ai essayé impérieuses en attente t RANSITION avec 0,0 (se débarrasser des transitions tout à fait), mais il est toujours le même

code:

getSupportFragmentManager().beginTransaction() 
      .replace(R.id.contentBlock, fragmentA, "FRAGMENTA") 
      .add(R.id.contentBlock, fragmentB) 
      .hide(fragmentB) 
      .commit(); 

et plus tard:

getSupportFragmentManager().beginTransaction() 
      .show(fragmentB) 
      .remove(fragmentA) 
      .commit(); 

Répondre

1

Avez-vous essayé d'installer TRANSIT_NONE pour le FragmentTransaction?

TRANSIT_NONE Aucune animation pour la transition.

En outre, étant donné que vous remplacez simplement un fragment avec un autre, je suggère d'utiliser le remplacer comme dans l'exemple ci-dessous:

// Create new fragment and transaction 
Fragment newFragment = new ExampleFragment(); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 

// Replace whatever is in the fragment_container view with this fragment, 
// and add the transaction to the back stack if needed 
transaction.replace(R.id.fragment_container, newFragment); 
transaction.setTransition(FragmentTransaction.TRANSIT_NONE); 
transaction.addToBackStack(null); 

// Commit the transaction 
transaction.commit(); 

NOTE: Les fragments sont fixés dans XML, ne peut pas être remplacé. (Comme indiqué here)

+0

Les deux solutions fonctionnent aussi bien et empêchent l'écran de scintiller, donc je leur donnerais honnêtement les deux meilleures réponses. Puisqu'il ne peut y en avoir qu'un, je vais devoir choisir celui-là – Jon

1
mMapFragment = new MapFragment(); 

ft.beginTransaction (mMapFragment) .detach (getactivity) .attach (mMapFragment) .commit();