2016-01-05 5 views
0

J'ai MainLayout qui contient plusieurs instances de DrawerLayout, chaque Drawerlayout a 3 éléments et chaque élément a un fragment. Lorsque je clique sur un élément, son fragment s'affiche sur MainLayout par FragmentTransaction.Créer un fragment imbriqué

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.home) { 
     FragmentTransaction transaction = manager.beginTransaction(); 
     Hello f1 = new Hello(); 
     transaction.replace(R.id.main_layout,f1,"home"); 
     transaction.commit(); 

    } 

Jusqu'à présent, le projet s'exécute sans problème. Mais, j'ai besoin de mettre un Fragment à l'intérieur du Fragment d'un élément (Fragment imbriqué). Le fragment de l'élément a déjà un fragment à l'intérieur, alors comment puis-je faire cela?

Répondre

0

Vous pouvez imbriquer un fragment à l'intérieur d'un autre fragment à l'aide du gestionnaire de fragments enfants du fragment hôte. Un exemple de configuration peut ressembler à ceci:

HostFragment.java, un fragment hôte qui héberge un fragment arbitraire:

public class HostFragment extends Fragment { 
private Fragment hostedFragment; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    View view = inflater.inflate(R.layout.host_fragment, container, false); 
    if (hostedFragment != null) { 
     replaceFragment(hostedFragment); 
    } 
    return view; 
} 

public void replaceFragment(Fragment fragment) { 
    getChildFragmentManager().beginTransaction().replace(R.id.hosted_fragment, fragment).commit(); 
} 

public static HostFragment newInstance(Fragment fragment) { 
    HostFragment hostFragment = new HostFragment(); 
    hostFragment.hostedFragment = fragment; 
    return hostFragment; 
} 

}

host_fragment.xml, la mise en page gonflée par la Classe HostFragment:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/hosted_fragment" > 

</FrameLayout> 

Si vous avez également besoin d'une ba ck navigation pour chaque HostFragment, référez-vous à this tutorial J'ai écrit sur une situation similaire avec un ViewPager. J'espère que vous pouvez adapter le tutoriel à votre situation. Reportez-vous également à la section this et this du guide de codepath sur les fragments.