2012-04-12 7 views
19

J'ai trois fragments comme indiqué dans la figure ci-dessous. J'ai ajouté ces trois fragments dans LinearLayout en utilisant le fichier .xml et lorsque mon activité de lancement démarre, je charge cette mise en page .xml en utilisant setContentView.

J'ai quelques contrôles sur fragment2. En cliquant sur un, le fragment est chargé par programmation en utilisant FragmentTransaction et la méthode commit. Ce fragment est ajouté à l'écran mais le problème est que le fragment4 ajouté de manière pragmatique occupe toute la zone de l'écran. Quel peut être le problème?

Note: Sur tout élément, cliquez sur f2 Je veux remplacer seulement f2 par le nouveau fragment f4. Gardez à l'esprit que j'ai ajouté f1, f2, f3 au fichier de mise en page xml et que j'ai ajouté un nouveau fragment f4 par programmation. Conserver uniquement FrameLayout en tant qu'espaces réservés pour le fragment dans le fichier XML.

enter image description hereRemplacer un fragment par programme

+0

Ce n'est pas clair. Est-ce que vous montrez tous les quatre fragments ensemble à la fin? –

Répondre

33

Vous devez toujours ajouter, supprimer et remplacer vos fragments par programmation. En tant que tel, je vous suggère de remplacer vos fragments F-1, F-2 et F-3 avec des conteneurs tels que FrameLayout.

Fondamentalement, au lieu d'avoir un élément <fragment/> comme F-1, vous en faites un élément <FrameLayout/>. Ensuite, vous effectuez une transaction fragment dans votre FragmentActivity de onCreate: Maintenant,

Fragment1 f1 = new Fragment1(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.f1_container, f1); // f1_container is your FrameLayout container 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
ft.addToBackStack(null); 
ft.commit(); 

Supposons que vous avez fait pour F-1, F-2 et F-3. Vous remplacez ensuite f2 par f4 en faisant la même chose à nouveau dans votre OnClickListener:

public void onClick(View v) { 
    Fragment4 f4 = new Fragment4(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.f2_container, f4); // f2_container is your FrameLayout container 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 
+0

Avez-vous des références pour que je puisse prendre un exemple à partir de là? – MobiDev

+1

J'ai édité ma réponse. Cela devrait résoudre votre problème. – CodePrimate

+1

Merci. OK ce que je comprends est Ne pas mettre des fragments directement dans la mise en page XML. Mettez des framelayouts à la place des éléments de fragment. Et en remplaçant f4 par f2, utilisez frame of f2. Ai-je raison? Vous pouvez donner un site de référence pour le vérifier. – MobiDev

2

Dans le OnCreate, chargez les fragments dans le framelayout. OnClick du fragment, donne l'identifiant de ce FrameLayout particulier à remplacer par Fragment4.

Questions connexes