J'espère que quelqu'un peut éclaircir ce que je fais mal ici. J'ai un Master Detail commun sur une tablette en mode paysage. La seule mise en garde est que certains éléments du masque ouvrent FragA dans la section Détail, et d'autres ouvrent FragB dans la section Détail. Tout semble bien, sauf le processus actuel de commutation des fragments. Quel que soit le fragment montré en premier est le seul qui montre. J'ai utilisé la méthode de remplacement pour les échanger, et tous les commentaires SO sur le sujet que je peux trouver indiquent que cela ne fonctionnera pas si j'ai ajouté les fragments de détail en XML. Malheureusement, cela ne s'applique pas pour moi puisque j'ajoute tous les fragments dynamiquement. Mon code ressemble à ceci:Remplacer le fragment Android ne fait rien
FragmentInfo frag = (Helper.isImageViewable(fileSelected)) ? getFragInfoByClass(ImageViewerFragment.class) : getFragInfoByClass(DownloadProgressFragment.class) ;
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(frag.mFragment == null){
frag.mFragment = Fragment.instantiate(NewMainActivity.this, frag.mClass.getName());
ft.add(frag.target.getId(), frag.mFragment);
ft.commit();
ft = getFragmentManager().beginTransaction();
}
ft.replace(frag.target.getId(), frag.mFragment);
ft.commit();
C'est le seul code utilisé partout pour ajouter ces fragments, et ce qui semble se produire est selon fragment est ajouté d'abord fonctionne très bien, mais la méthode remplacer ne fonctionne pas du tout. Quel que soit le fragment était là ... toujours là.
Est-ce que quelqu'un sait ce que je fais mal?
Modifier
La section correspondante du fichier de mise en page ressemble à ceci:
<LinearLayout
android:id="@+id/fragments_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<FrameLayout
android:id="@+id/list_fragment"
android:layout_width="0dp"
android:layout_weight="0.39"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/details_fragment"
android:layout_height="match_parent"
android:layout_weight="0.61"
android:layout_width="0dp" />
<!-- ADD METADATA VIEW HERE -->
</LinearLayout>
Les deux FragmentInfo objets ont correctement une cible de l'FrameLayout avec id/details_fragment comme en témoigne le fait que l'un fonctionne correctement s'il est le premier ajouté.
Edit 2 Note: en utilisant ce bloc de code a aussi exactement le même résultat:
FragmentInfo frag = (Helper.isImageViewable(fileSelected)) ? getFragInfoByClass(ImageViewerFragment.class) : getFragInfoByClass(DownloadProgressFragment.class) ;
FragmentTransaction ft = getFragmentManager().beginTransaction();
if(frag.mFragment == null){
frag.mFragment = Fragment.instantiate(NewMainActivity.this, frag.mClass.getName());
ft.add(frag.target.getId(), frag.mFragment);
//ft.commit();
//ft = getFragmentManager().beginTransaction();
} else{
ft.replace(frag.target.getId(), frag.mFragment);
}
//ft.replace(frag.target.getId(), frag.mFragment);
ft.commit();
detailsContainer.setFragmentInfo(frag);
Afficher le fichier de mise en page –
ajouté en modifier, bien que je ne pense pas qu'il devrait importer puisque comme je l'ai mentionné, le premier fragment ajouté (quel qu'il soit) apparaît correctement – akhalsa