189 8069 5689

四大组件(5)-Fragment

Fragment

成都创新互联科技有限公司专业互联网基础服务商,为您提供雅安机房托管高防服务器,成都IDC机房托管,成都主机托管等互联网服务。

由于Activity太“重”不能动态注册、不能模块化,因此引入Fragment

一、生命周期

onAttach():Fragment和Activity相关联时调用。可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。

onCreateView():创建Fragment的布局。

onActivityCreated():当Activity完成onCreate()时调用。

onDestroyView():当Fragment的UI从视图结构中移除时调用。

onDetach():当Fragment和Activity解除关联时调用。

其它生命周期与Activity相同

上面的方法中,只有onCreateView()在重写时不用写super方法,其他都需要。

二、注意事项

1、参数传递 使用setArg(“bundle”),Fragment最好创建个newInstance(xx),让调用者不需要知道key名称

2、getActivity在onAttach中获取.

3、提交尽量用Commit,如在异步中提交,建议使用commitAllowingStateLoss() 

        commit  -> 安排当前事务FragmentTransaction进行提交。异步,必须在Activity的onSaveInstanceState调用之前提交。否则会抛异常。

commitAllowingStateLoss ->  和commit类似。但是如果本次是在Activity的onSaveInstanceState调用之后,那么本次提交记录在Activity恢复的时候,可能不被保存。

commitNow() ->将事务立即提交。所有添加的Fragment会被立即初始化,并开始生命周期。所有被移除的Fragment将会被立即移除。

调用这个方法,相当于调用commit,然后调用FragmentManager的executePendingTransactions()。

commitNowAllowingStateLoss() -> 和commitNow类似。但是如果在在Activity的onSaveInstanceState调用之后,那么本次提交记录在Activity恢复的时候,可能不被保存。

 4..当FragmentA(初始化)和FragmentB(后启动)调用 fragmentTransaction.replace()

 "新建"  (onAttach->onCreate->onCreateView->onActivityCreated)

 "显示"  (onStart->onResume)

 "隐藏"  (onPause->onStop)

 “结束”  (onDestroyView->onDestroy->onDetach)

 FragmentA "打开"--->执行 "新建"  再执行FragmentA 的"显示"

 FragmentB "打开"--->执行FragmentA "隐藏"  再才执行FragmentA “关闭” 执行 Fragment B "新建"  再执行Fragment B 的"显示"

 FragmentB "关闭"--->执行FragmentB "隐藏"  再才执行FragmentB “关闭” 最后执行FragmentA 的"显示"

5、防止fragment重新加载,浪费用户流量或者影响用户体验。对于FragmentTransation的replace方法,官方的建议是如果上一个fragment是不保留的情况下可以使用。否则的话采用先add然后根据需求hide或者show,这样可以实现fragment缓存,另外一张情况就是和ViewPager联合使用,然后设置setOffscreenPageLimit()这个方法设置缓存的页面的大小。 

加回退栈的操作,如果使用 addToBackStack(String)将会抛出一个 IllegalStateException的异常。

参考:

基础(转载):https://www.jianshu.com/p/11c8ced79193

进阶(转载):https://www.jianshu.com/p/d9143a92ad94

备注:个人笔记,有错请及时指出,谢谢 联系QQ:285232718


网页名称:四大组件(5)-Fragment
当前路径:http://cdxtjz.cn/article/piohhc.html

其他资讯