android知识总结--Fragment

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通常要实现以下三个方法:
onCreate():初始化。
onCreatView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState):绘制界面,该方法返回View,也就是该Fragment要显示的View。
onPause():离开该Fragment市回调。
注意:各个方法与Activity相似,不再赘述。
二、与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。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值