要给Fragment提供一个布局,你必须实现onCreateView()回调方法,系统在给Fragment描画布局的时候会调用这个方法。这个方法的实现必须返回一个View,它是Fragment布局的根。
注:如果你的的Fragment是ListFragment的子类,默认的实现是从onCreateView()方法中返回一个ListView(),因此你不需要实现它。
为了从onCreateView()方法中返回一个布局,你能够通过XML文件中的一个布局资源的定义来填充它。为了帮助你做这件事,onCreateView()方法提供了一个LayoutInflater对象。
例如,Fragment的一个子类通过example_fragment.xml文件加载一个布局:
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.example_fragment, container, false);
}
}
传递给onCreateView()方法的container参数是ViewGroup(来自Activity的布局)的父类,你的Fragment参数将被插入到这个容器中。如果Fragment正在被恢复,那么savedInstanceState参数就提供一个有关前一个Fragment实例数据的Bundle对象(在有关处理Fragment生命周期(Handling the Fragment Lifecycle)一节中会更多的讨论恢复状态)。
Inflate()方法需要三个参数:
1. 第一个参数是你想要填充的布局的资源ID;
2. 第二个参数ViewGroup是被填充的布局的父容器,传递container参数是至关重要的,因为在这个方法执行过程,系统要把这个父视图指定的布局参数用作被填充的布局的根视图。
3. 一个布尔值参数指示在填充期间是否要把布局绑定到ViewGroup(第二个参数)上。在这个例子中,指定false是因为系统已经把被填充的布局插入到container参数中了---如果传递true,在最终的布局中会创建一个多余ViewGroup。
你已经看到了如何创建一个提供布局的Fragment,接下来就需要把Fragment添加到Activity中。