Android开发:Fragment生命周期概述
- 2016年12月8日,Google中国开发者大会在京举行,同时正式上线了Google中国开发者网站Google Developers,查看官方学习资源再也不用爬梯子了
- 简介
- 使用说明
- 生命周期
简介
Fragment就是小型的Activity,它是在Android3.0时出现的。Fragment是表现Activity中UI的一个行为或者一部分。
可以把fragment想象成activity的一个模块化区域,有它自己的生命周期,接收属于它自己的输入事件,并且可以在activity运行期间添加和删除(有点像一个可以在不同的activity中重用的子Activity)。
Fragment必须被嵌入到一个activity中。它们的生命周期直接受其宿主activity的生命周期影响。当一个activity正在运行时,就可以独立地操作每一个Fragment,比如添加或删除它们。
Fragment可以定义自己的布局、生命周期回调方法,因此可以将fragment重用到多个activity中,因此可以根据不同的屏幕尺寸或者使用场合改变fragment组合。
使用说明
如何创建Fragment
- 为Fragment定义一个布局
- 定义类继承Fragment
- 重写类中的onCreateView方法,返回一个View对象作为当前Fragment的布局。
fragment第一次绘制它的用户界面的时候,系统会调用onCreateView()方法。为了绘制fragment的UI,此方法必须返回一个作为fragment布局的根的view。如果fragment不提供UI,可以返回null。
public class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_example, null);
return view;
}
}
如何将Fragment添加到Activity
Activity必须在清单文件中进行声明,但是Fragment不需要,Fragment只需要在Activity的布局文件中声明就可以了。
<fragment
android:id="@+id/fmt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="com.gunther.fragment.exampleFragment"
/>
当系统创建这个activity layout时,它实例化每一个在layout中指定的Fragment,并调用它们的onCreateView()方法,来获取每一个Fragment的layout,系统将从Fragment返回的View 直接插入到<fragment>元素所在的地方。
每一个fragment都需要一个唯一的标识,如果activity重启,系统可以用来恢复Fragment,并且可以用id来捕获Fragment来处理事务,例如移除它。
有3种方法来为一个fragment提供一个ID,具体如下所示:
- 为android:id属性提供一个唯一ID;
- 为android:tag属性提供一个唯一字符串;
- 如果以上2个你都没有提供,系统将使用容器view的ID;
如何切换Fragment
要在activity中管理Fragment,需要使用FragmentManager可以通过调用activity的getFragmentManager()取得它的实例。
案例:点击不同的按钮切换到不同的Fragment进行显示。具体实现步骤:
- 设置布局文件:添加三个按钮用于切换Fragment,并在按钮下方添加一个FrameLayout用来替换成响应的Fragment。
- 创建三个Fragment,SportsFragment、NewsFragment、GameFragment。
public class SportsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sports, null);
return view;
}
}
其余两个Fragment跟SportsFragment代码一致,只是布局文件不同。
-
添加切换Fragment的逻辑,这个是新闻频道按钮的点击事件
public void news(View view){ //获取Fragment管理器对象 FragmentManager manager = getFragmentManager(); //开启事务 FragmentTransaction transaction = manager.beginTransaction(); //将FrameLayout控件替换成Fragment对象 transaction.replace(R.id.frame, new NewsFragment()); //提交事务 transaction.commit(); }
sports()法,games()法同上
Fragment的生命周期
Fragment的生命周期和activity生命周期很像,其生命周期方法如下所示。
- onAttach:绑定到activity
- onCreate:创建fragment
- onCreateView: 创建fragment的布局
- onActivityCreated: activity创建完成后
- onStart: 可见, 不可交互
- onResume: 可见, 可交互
- onPause: 部分可见, 不可交互
- onStop:不可见
- onDestroyView: 销毁fragment的view对象
- onDestroy: fragment销毁了
- onDetach: 从activity解绑了