2016-01-05 66 views
0

我有MainLayout包含多个DrawerLayout实例,每个Drawerlayout有3个项目,每个项目都有一个片段。当我点击一个项目时,它的片段通过FragmentTransaction显示在MainLayout上。创建一个嵌套片段

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(); 

    } 

到目前为止,该项目运行没有问题。 但是,我需要把Fragment放在一个项目的Fragment(嵌套片段)中。 项目的片段已经有一个片段,所以 我该怎么做?

回答

0

您可以使用主机片段的子片段管理器将片段嵌套在另一个片段中。一个例子可以设置是这样的:

HostFragment.java,承载任意片段的宿主片段:

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,由膨胀的布局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> 

如果您还需要单独的ba每个HostFragment的ck导航,请参阅this tutorial我已经用ViewPager写过类似的情况。希望你可以根据你的情况调整教程。有关片段的代码路径指南,请参阅thisthis