Fragment详解(三):创建Fragment
2016-03-23 14:30
309 查看
创建Fragment
要想创建Fragment,必须创建Fragment的子类或Fragment的子类。但这里需要注意一下如我我们的APP需要兼容Android3.0一下的版本,需要引入v4的包,然后使用v4包中的Fragment。系统提供的Fragment 为 android.app.Fragment
v4提供的Fragment 为 android.support.v4.app.Fragment
这里我们只讨论系统提供的Fragment,v4中的Fragment与其大同小异,我们就不在描述了。
接下来我们就通过实际的代码来说明一下如何创建Fragment。
我们新建一个工程,然后在其中创建一个类继承android.app.Fragment(之后简称Fragment)。
import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * 继承android.app.Fragment */ public class FragmentA extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 要返回Fragment的视图布局 View rootView = inflater.inflate(R.layout.fragment_a, container, false); // 获取视图中的子控件 Button button = (Button) rootView.findViewById(R.id.button); // ... return rootView; } }
这里我们通过onCreateView参数中的inflater的inflate方法来加载一个布局,其第一个参数为我们为Fragment指定的布局参数,第二个参数是onCreateView中的第二个参数,这个参数是我们为Fragment视图指定的父视图,第三个参数指定我们是否将Fragment布局视图添加到container中,这里是false,因为系统已经为我添加了,所以这里我们就不用再次添加了。
关于LayoutInflater可参数解释我们可以参照之前的博文《LayoutInflater详解》。
如代码所示我们创建一个FragmentA继承了Fragment,并重写了它的onCreateView生命周期方法,这个方法返回一个视图,作为Fragment的视图,通常情况下我们会在这个方法中通过findViewById来初始化视图中的控件,关于Fragment的生命周期方法我们稍后再讲解。
这样我们就创建好了一个简单的Fragment,接下来我们看看如何使用Fragment。
如何使用Fragment
使用Fragment通常有如下两种方式:1.在xml布局中直接使用
2.在代码中使用
下面我们分别讲解一下具体的用法。
1)在xml布局中使用
在xml布局中使用Fragment与使用其他控件基本相同,我们通过具体的代码来体会一下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <fragment android:name="com.todo.fragmentdemo.FragmentA" android:id="@+id/fragmentA" android:layout_width="match_parent" android:layout_height="500dp"/> </LinearLayout>
我们使用标签来表示一个fragment,然后指定其android:name属性为具体Fragment类的全路径即可。是不是很简单啊。
2)在代码中使用Fragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> </LinearLayout>
首先我们看到上面是一个activity的布局,其id为content。我们在来看看activity的代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建一个fragment对象 Fragment fragment = new FragmentA(); // 获取FragmentManager FragmentManager manager = getFragmentManager(); // 获取FragmentTransaction FragmentTransaction ft = manager.beginTransaction(); // 将fragment对象添加到布局id为content的ViewGroup中 ft.add(R.id.content, fragment); // 提交事务 ft.commit(); }
这里我们解释一下Activity中的代码,首先我们创建一个FragmentA对象,然后调用getFragmentManager方法来获取FragmentManager对象,(
如果使用Android3.0以下的版本,需要引入v4的包,然后Activity继承FragmentActivity,然后通过getSupportFragmentManager获得FragmentManager。不过还是建议版Menifest文件的uses-sdk的minSdkVersion和targetSdkVersion都改为11以上,这样就不必引入v4包了。)
FragmentManager是系统为我们提供用于在Activity中操作Fragment使用的一个工具类。接着我们通过FragmentManager对象来获取FragmentTransaction对象。FragmentTransaction是操作Framgent事务使用,例如添加、移除、替换Fragment等等操作都是用FragmentTransaction来完成,我们后面会详细的讲解。接下来我们调用了FragmentTransaction的add方法,其中add的第一个参数是我们activity不中根布局的id,第二个参数是我们创建的FragmentA对象。这个方法的作用就是将Fragment的视图添加到id位content的布局当中,然后调用FragmentTransaction的commit提交事务,运行上面两种方式的代码效果是一样的,效果如下:
现在来总结一下从创建到使用Fragment的具体步骤:
创建一个class继承Fragment。
重写Fragment的onCreateView方法,并返回一个布局视图。
使用Fragment分为两种方式
在布局中使用标签指定其android:name属性为具体Fragment类的全路径。
在代码中使用Fragment
new一个Fragment实例
调用getFragmentManager获取FragmentManager。// v4中调用getSupportFragmentManager
获取FragmentTransaction
调用FragmentTransaction的add方法将fragment添加到指定的布局当中
调用commit方法提交事务
一般情况下,我们通过上面的步骤即可完成Fragment的使用。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories