0

Le fragment ne fonctionne pas lors de l'utilisation de la balise fragment dans la présentation XML. Mais, après avoir remplacé le fragment tag par Framelayout, cela fonctionne correctement sans modifier mon code. Quand j'utilise le code ci-dessous, le fragment ne change pas/ne fonctionne pas. Mais, quand je remplace le code ci-dessus par le code ci-dessous, il change/fonctionne.Le fragment ne fonctionne pas à l'aide de la balise fragment, fonctionne dans framelayout

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@+id/btnPressMe"> 
</FrameLayout> 

code Java:

FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    Fragment2 fragment2 = new Fragment2(); 
    fragmentTransaction.replace(R.id.fragment_container, fragment2); 
    fragmentTransaction.commit(); 
+0

les deux ont même Id .... ?? – koutuk

+0

Je fais un commentaire à la fois, c'est juste pour montrer le code. –

+0

utiliser id différent ... pour le même type de balises ' – koutuk

Répondre

0

Ajout des fragments statiquement dans le fichier de mise en page

Pour utiliser votre nouveau fragment, vous pouvez statiquement ajouter à une mise en page XML. Dans ce cas, l'attribut android: name pointe vers la classe correspondante, comme le montre l'extrait de code suivant.

<fragment 
    android:id="@+id/listFragment" 
    android:layout_width="0dp" 
    android:layout_weight="1" 
    android:layout_height="match_parent" 
    class="com.example.android.rssreader.MyListFragment" ></fragment> 
<fragment 
    android:id="@+id/detailFragment" 
    android:layout_width="0dp" 
    android:layout_weight="2" 
    android:layout_height="match_parent" 
    class="com.example.android.rssreader.DetailFragment" > 
</fragment> 

L'utilisation de ce scénario est logique dans le cas où vous avez différents fichiers de mise en page statique pour différentes configurations de l'appareil.

dynamique de manutention en fragments

La classe qui peut être l'accès à l'activité via la méthode getFragmentManager() vous permet d'ajouter, de supprimer et de remplacer des fragments dans la mise en page de votre activité. Les modifications doivent être effectuées dans une transaction via la classe FragmentTransaction.

Pour modifier les fragments d'une activité, vous définissez généralement un espace réservé FrameLayout dans le fichier de disposition.

<FrameLayout 
    android:id="@+id/listcontainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<FrameLayout 
    android:id="@+id/detailscontainer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="gone" /> 

Vous utilisez le FragmentManager pour remplacer le récipient avec un fragment.

// get fragment manager 
FragmentManager fm = getFragmentManager(); 

// add 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(R.id.your_placehodler, new YourFragment()); 
// alternatively add it with a tag 
// trx.add(R.id.your_placehodler, new YourFragment(), "detail"); 
ft.commit(); 

// replace 
FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.your_placehodler, new YourFragment()); 
ft.commit(); 

// remove 
Fragment fragment = fm.findFragmentById(R.id.your_placehodler); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.remove(fragment); 
ft.commit(); 

Un nouveau fragment remplace un fragment existant dans ce conteneur.

Si vous souhaitez ajouter la transaction au backstack d'Android, utilisez la méthode addToBackStack(). Cela ajoutera l'action à la pile d'historique de l'activité, c'est-à-dire, cela permettra de rétablir les changements de fragment via le bouton de retour.

+0

Rubin, je veux seulement un fragment/section dans mon activité qui pourrait remplacer avec différentes dispositions de fragments. Et, j'ai réalisé cela en utilisant un seul framelayout en XML, mais, la question est de savoir pourquoi cela ne fonctionne pas quand j'utilise fragment au lieu de framelayout? –

+0

pouvez-vous s'il vous plaît mettre à jour tout votre code XML et erreur logcat. peut-être vous avez des ID en double –

+0

J'ai déjà mis à jour la question, qui dit quand j'utilise le fragment il ne fonctionne pas, mais quand j'utilise framelayout au lieu de fragment cela fonctionne. Je ne nous fais pas tous les deux ensemble. Et, je ne reçois aucune erreur, le code fonctionne bien mais le fragment ne change pas. –

1

si vous voulez infalte à un autre fragment, vous devez utiliser
getChildFragmentManager() au lieu de getFragmentManager()

FragmentManager fobject = getChildFragmentManager(); 
FragmentTransaction transaction = fobject .beginTransaction(); 
fragment_container= fobject .findFragmentById(R.id.fragment_container); 

if (fragment_container!= null) { 
transaction.replace(R.id.fragment_container, yournewfragment); 
transaction.commit(); 
} 
transaction.commit(); 
+0

J'utilise Api 23 et il n'y a pas de fonction comme getChildFragmentManager() –