创建嵌套片段

Create a Nested Fragment

我的 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(嵌套 Fragment)中。 item 的 Fragment 里面已经有一个 fragment,所以 我该怎么做?

您可以使用宿主片段的子片段管理器将一个片段嵌套在另一个片段中。示例设置如下所示:

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 扩充的布局 class:

<?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>

如果您还需要为每个 HostFragment 单独返回导航,请参阅代码路径指南中有关片段的 this tutorial I've written about a similar situation with a ViewPager. Hopefully you can adapt the tutorial to your situation. Also refer to this and this 部分。