我有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 :(得分: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>
如果您还需要为每个HostFragment单独进行后退导航,请参阅this tutorial我已经写过与ViewPager类似的情况。希望您可以根据您的情况调整教程。另请参阅有关片段的codepath指南的this和this部分。