温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

四大组件(5) - Fragment

发布时间:2020-06-25 07:52:36 来源:网络 阅读:205 作者:lm8751 栏目:移动开发

Fragment

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


一、生命周期

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

onCreateView():创建Fragment的布局。

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

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

onDetach():当FragmentActivity解除关联时调用。

其它生命周期与Activity相同

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




二、注意事项

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

2、getActivityonAttach中获取.

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

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

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

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

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

commitNowAllowingStateLoss() -> commitNow类似。但是如果在在ActivityonSaveInstanceState调用之后,那么本次提交记录在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重新加载,浪费用户流量或者影响用户体验。对于FragmentTransationreplace方法,官方的建议是如果上一个fragment是不保留的情况下可以使用。否则的话采用先add然后根据需求hide或者show,这样可以实现fragment缓存,另外一张情况就是和ViewPager联合使用,然后设置setOffscreenPageLimit()这个方法设置缓存的页面的大小。 

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


参考:

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

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


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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI