Fragment允许将Activity拆分成多个完全独立封装的可重用的组件,每个组件有它自己的生命周期和UI布局。
Fragment最大的优点就是你可以为不同屏幕大小的设备创建灵活动态的UI.
每个Fragment都是独立的模块,并与它所绑定的Activity紧密联系在一起的。多个Activity可以共用一个Fragment. Fragment为大量的不同型号、尺寸、分辨率的设备提供了一种统一的 UI优化方案。
可以通过继承Fragment类来创建一个新的Fragment.在大多数情况下,需要为Fragment分配一个UI,也可以为Activity创建一个没有任何UI但提供后台行为的Fragment.
和Activity不同,Fragment不需要在mainfest.xml文件中注册,这是因为Fragment只有嵌入到一个activity时,它才能够存在,它的生命周期也依赖于它所依赖的activity.
可以通过一个程序来观察其生命周期:
package com.example.myfragment; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class MainActivity extends Fragment { //调用该方法时Fragment会被连接到它的父Activity上 @Override public void onAttach(Activity activity) { super.onAttach(activity); //获取对父Activity的引用 Log.e("tag", "onAttach"); } //调用该方法进行Fragment的初始创建 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //初始化Fragment Log.e("tag", "onCreate"); } //一旦Fragment已被创建,要创建它自己的用户界面时调用的方法 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //创建、或者填充Fragment的UI,并返回它 //如果这个Fragment没有UI,那么返回null Log.e("tag", "onCreateView"); return super.onCreateView(inflater, container, savedInstanceState); } //一旦父Activity和Fragment的UI已被创建,则调用该方法 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //完成Fragment的初始化,尤其是那些父Activity被初始化完成后或者Fragment的view被完全填充后才能做到事情 Log.e("tag", "onActivityCreated"); } //在可见生命周期的开始时被调用 @Override public void onStart() { super.onStart(); //应用所有的UI变化 Log.e("tag", "onStart"); } //在活动生命周期的开始时被调用 @Override public void onResume() { super.onResume(); //恢复所有暂停的Fragment需要的UI更新,线程或者进程,但在非活动状态时它是暂停的。 Log.e("tag", "onResume"); } //在活动周期结束时被调用 @Override public void onPause() { //当Activity不是活动的前台Activity时,需要暂停UI的更新、挂起或者暂停那些不需要更新的CPU的集中处理。由于调用这个方法后,进程可能被终止,所有要保存所有的编辑和状态改变信息。 super.onPause(); Log.e("tag", "onPause"); } //在活动生命周期结束时,调用该方法保存UI的状态 @Override public void onSaveInstanceState(Bundle outState) { //这个outState会被传递到onCreate、onCreateView和onActivityCreate(如果它的父Activity被终止并且重新启动)方法中 super.onSaveInstanceState(outState); Log.e("tag", "onSaveInstanceState"); } //在可见生命周期结束时调用该方法 @Override public void onStop() { //当Frament不可见时,暂停其余的UI更新、挂起线程或者暂停不再需要的处理 super.onStop(); Log.e("tag", "onStop"); } //当Fragment的view被分离时,调用该方法 @Override public void onDestroyView() { //清除相关资源的view super.onDestroyView(); Log.e("tag", "onDestroyView"); } //在整个生命周期结束时调用该方法 @Override public void onDestroy() { //清除所有的资源,包括结束线程和关闭数据库连接等 super.onDestroy(); Log.e("tag", "onDestroy"); } //当Fragment从它的父Activity上分离时,调用该方法 @Override public void onDetach() { super.onDetach(); Log.e("tag", "onDetach"); } }
Fragment完整的生命周期开始于绑定到它的父Acitvity,结束于父Activity上分离。通过分别调用onAttach和onDetach来表示这些事件。
onAttach事件在Fragment的UI创建之前,以及Fragment自身或它的父Activity完成它们的初始化之前会被触发。通常情况下,onAttach事件用来获取一个Fragment的父Activity的引用,为进一步的初始化工作做准备。
Fragment介绍
时间: 2024-11-06 07:43:18