Fragment代表用户界面的一部分界面或者行为,能在一个Activity中使用多个Fragment或者多个Activity使用一个Fragment。你可以把Fragmen 想象成Activity中的一个单元模块,它有自己的生命周期、接收或增加或移除自己的输入事件(触摸事件也是输入事件)。
Fragment必须嵌入到Activity中,并且Fragment的生命周期被调用其的Activity直接影响。例如:当Activity paused时,Fragment也会paused。使用者能独立的控制每个fragment,比如增加或者移除他们。
当使用者使用fragment作为Activity布局的一部分时,它必须按层次的定义到ViewGroup中并且定义其自己的View。使用者可以插入一条fragment到Activity布局中,通过在布局文件中声明<fragment>标签元素,或者在应用程序代码中增加到一个存在的ViewGroup中。然而,fragment并不是一个Activity布局中必须的,也可以让其处于不可见状态工作。
创建Fragment
为了创建Fragment,使用者必须建一个Fragment的子类,Fragment有些与Activity类似的方法,其包含的回调方法类似Activity,例如:onCreate、onStart、onPause与onStop。事实上,使用者可以把一个写好的Android程序转换为使用fragment的程序,使用者只需简单的把Activity中的回调方法移到fragment的回调中去。
一般来说,至少调用下面的生命周期方法:
onCreate():当fragmen被创建时被系统调用时,可以再这个方法中初始化fragment将在生命周期中保留的基础组件。
onCreateView() 当fragment第一次绘制用户界面时调用此方法,为了画UI,使用者必须返回View对象作为fragment的根布局,如果fragment不需要提供UI就返回null。
onPause() 这个方法简单点说就是让使用者保存数据用的。
具体创建方法:
1. 新建一个类TestFragment继承Fragment,实现onCreateView()方法。
2. 在main.xml文件中添加fragment标签。比如:
<fragment
android:id="@+id/titles"
android:tag="ttt"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
class="wei.liu.TestFragment"/>
3. 在Activity中setContentView(R.layout.main)就能看到fragment中定义的布局效果了。
控制Fragment
Fragment可以通过getFragment()方法得到FragmentManager对象,再通过FragmentManager的findFragmentById或者findFragmentByTag方式得到Fragment。一般不通过Fragment对象控制控制Fragment状态,而是通过FragmentTransaction对象控制。FragmentTransaction对象可以通过FragmentManager的beginTransaction()方法获得。
FragmentTransaction的add系列方法是把fragment存到FragmentTransaction便于统一管理。hide(Fragment fragment)方法用于影藏add过的fragment,show(Fragment fragment)与之对应。
replace(int containerViewId, Fragment fragment)方法可以用fragment替换掉containerViewId的显示,这个id必须为Viewgroup或继承其的View或者fragment的id。
Fragment的子类ListFragment是一个ListView样式的fragment,可以不继承不重写,直接像ListView一样setListAdapter来附加显示。setListShown(boolean shown)可以控制ListView显示不显示。
一个ListFragment的例子:点击打开链接