fragment与 Activity十分相似,拥有自己的生命周期,但它必须嵌入到Activity之中,或者说是Activity的子模块,活在Activity的在生命周期内。
〇、特点
〇、特点
1)Fragment总是作为Activity界面的组成部分,Fragment可调用getActivity()方法获取它所在的Activity, Activity调用FragmentManager的findFragmentByld()或findFragmentByTag()方法来获取Fragment。
2)在Activity运行过程中,可调用 FragmentManager的add()、remove()、replace()方法动态地添加、删除或替换Fragment。
3)—个Activity可以同时组合多个Fragment;反过来,一个Fragment也可被多 Activity 复用。4)Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。
一、生命周期
继承关系图:
生命周期及与Activity生命周期关系图:
创建Fragment通常要实现以下三个方法:二、与Activity通信
onCreate():初始化。
onCreatView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState):绘制界面,该方法返回View,也就是该Fragment要显示的View。
onPause():离开该Fragment市回调。
注意:各个方法与Activity相似,不再赘述。
1.为了在activity中显示Fragment还必须将Fragment添加到activity中。
有如下两种方式:
1)在布局文件中添加:在布局文件中使用<fragment.../>元素添加Fragment,其中<fragment.../>的android:name属性必须指定Fragment的实现类。
2)在Java代码中添加:在Java代码中通过FragmentTransaction对象的relpace()或add()方法来替换或添加Fragment。提示:Activity的getFragmentManager()方法返回FragmentManager,通过调用FragmentManager的beginTransaction()方法获取FragmentTransaction对象。
2.在activity中获取Fragement,在Fragment中获取activity的方法:
1)Fragment获取它所在的Activity:调用Fragment的getActivity()方法即可返回它所在的Activity。
2)Activity获取它包含的Fragment:调用 Activity关联的 FragmentManager的 findFragmentByld(int id)或findFragmentByTag(String tag)方法即可获取指定的 Fragment。
提示:
在界面布局文件中使用<fragment.../>元素添加Fragment时,可以为<fragment.../>元素指定android:id或android:tag属性,这两个属性都可用于标识该 Fragment,接下来 Activity将可通过 findFragmentByld(int id)或 findFragmentByTag(String tag)来获取该 Fragment。3.Fragment与Activity可能还需要相互传递数据的方式:
1)Activity向Fragment传递数据:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法即可将 Bundle数据包传给 Fragment。2)Fragment向Activity传递数据或Activity需要在Fragment运行中进行实时通信:在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口,这样Fragment即可调用该回调方法将数据传给Activity。
4.Fragment管理与Fragment事务
Fragment管理
Activity管理Fragment主要依靠FragmentMangerFragmentManger的功能:
1.使用findFragmentById()或findFragmentByTag()方法来获取指定Fragment。
2.调用popBackStack()方法将Fragment从后台栈中弹出(模拟用户按下BACK按键)。
3.调用addOnBackStackChangeListener()注册一个监听器,用于监听后台栈的变化。
Fragment事务
FragmentTransaction也称Fragment事务,代表了Activity对Fragment执行的多个改变操作。
如果需要添加,删除,替换Fragment,则需要借助于FragmentTransaction对象,FragmentTransaction代表
Activity对Fragment执行多个改变。可通过FragmentManager来获得FragmentTransaction,每个
FragmentTransaction可以包含调用多个add(),remove(),和replace()操作,最后还调用commit()方法提交事务即可。
// 创建一个新的Fragment Fragment newFragment = new XXXXXFragment(); // 打开事务 FragmentTransaction transaction = getFragmentManager().beginTransaction(); // 替换该界面中fragment_XXXX容器内的Fragment transaction.replace(R.id.XXXX,newFragment); // 将事务添加到back栈,允许用户按BACK按键返回替换Fragment之前的状态 transaction.addToBackStack(null); // 提交事务 transaction.commit();
三、整理再多,依然不够明了,Talk is cheap,let me show you the code。下一篇将会写一个demo,实现底部tab菜单,每一项为一个fragment,类似QQ。