位置: 编程技术 - 正文

谈谈Fragment的构造函数、重新创建(recreate)及相关(fragment detach)

编辑:rootadmin

推荐整理分享谈谈Fragment的构造函数、重新创建(recreate)及相关(fragment detach),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:fragment,fragment原理,简述fragment的作用,fragmental,fragment详解,fragment例子,fragment例子,fragment详解,内容如对您有帮助,希望把文章链接给更多的朋友!

版权所有。所有权利保留。

欢迎转载,转载时请注明出处:

Fragment使用经验,不准备详细介绍,只是介绍一些使用注意点,对于有一定开发经验的朋友应该会比较有帮助。对于我理解不对的地方,希望批评指正,谢谢!

1、Fragment初始化

一定要提供默认构造函数。

不能用构造函数传递参数!不要写带参数的构造函数。参数通过下面介绍的方式传递。

原因:Fragment会被重新销毁(Activity销毁的时候它里面的Fragment就被销毁了,可能因为内存不足,手机配置发生变化,横竖屏切换)。在重新创建的时候系统调用的是无参构造函数。

标准做法是:

在Fragment里添加获取Fragment的newInstance函数,以后获取Fragment就使用这个函数,不要使用构造函数新建Fragment!

Fragment内部在初始化的时候需要获取外界传递的参数,这时候就用getArguments获取Bundle,再从Bundle里获取对应的参数。Bundle在Fragment销毁和重新创建的时候持续保存。

比如:

Activity里使用MyFragment时应该这样写:

谈谈Fragment的构造函数、重新创建(recreate)及相关(fragment detach)

其实还是有点小问题,具体见第5点。2、关于getActivity()Fragment的方法getActivity()只在被关联到Activity之后才会得到结果,也就是在onAttach和onDetach两个生命周期之间会非空(此时isAdded返回&#;是true)。其他时候不应该使用Activity!如果要使用,那说明你设计得不好。

使用所依附的Activity时应该判断getActivity是否为空或者isAdded是否为true。

Fragment依附的Activity随时可能被destroy掉!很多时候是在不经意间。机型适配的时候就会发现。

3、Activity引用Fragment里不应该保留Activity引用!需要用到的时候通过getActivity()获取,因为那个引用不仅会导致内存泄露,而且在你用的时候,那个Activity可能已经不是正在显示的那个Activity了,这个Fragment也可能已经不是正在显示的那个Fragment了。4、关于生命周期

通过add添加Fragment会触发Fragment生命周期,hide和show不会触发生命周期。

像微信那样,一个Activity里有四个Fragment,下面四个按钮,点击一个按钮显示其中一个Fragment。这种情况下,为了优化性能,你可以这样做:

起初只add第一个Fragment,其余三个Fragment都不添加。点击某个标签的时候先看对应的Fragment是否已经添加,没有则new一个并add这个Fragment,隐藏其他所有Fragment;如果已经添加了就直接show这个Fragment,隐藏其他所有Fragment。

5、关于Fragment销毁和重建

(1)Activity因内存不足、配置变化等原因被销毁的时候,包含的Fragment也会被销毁,无论此Fragment是否有id,系统都会调用Fragment的onSaveInstanceState,并且保留之前setArguments的Bundle,并且Activity的FragmentManager里的Fragment会被记录。

(2)由于(1)的原因,如果一个Activity里的fragment是通过add方式添加的,那么如果出现上述情况,就必须在Activity的add地方判断是否应该重新添加Fragment,避免重复添加。

(3)刚刚在第1点时说到Fragment在Activity中的使用。那个地方说得还是有点问题。其实应该给每个Fragment设一个tag,在FragmentTransaction.add方法添加Fragment的时候,第三个参数使用这个tag。初始化的时候,应该先从FragmentManager里查看这个Fragment是否已经有,如果有就直接使用原来的,如果没有再新建。

系统在重建Activity时会重建Fragment(调用Fragment的默认构造函数),并且将这些添加到FragmentManager里,并且设置之前setArguments时使用的Bundle。此时系统回调Fragment的onCreate(Bundle)、onActivityCreated(Bundle)、onViewStateRestored(Bundle)这类方法的时候,参数不为空。

注意:新建的Fragment和原来对应的Fragment不是同一个实例!

Activity内正确使用Fragment的代码如下:

Android使用ViewFlipper实现Switch动画特效 使用ViewFlipper实现Switch简单的开启可关闭动画特效,Switch部分主要为自定义控件,继承的ViewFlipper。1、主Activity文件,其中实现了对mSwitch的点击监听事件

Android 左右滑动菜单 DrawerLayout简单实现 一、介绍导航抽屉可以显示在屏幕的左右两侧,默认情况下是隐藏的,当用户用手指从边缘向另一侧滑动的时候,会在内容上方出现一个隐藏的面板,

Android 内存与性能 官方教程AndroidPerformance是GOOGLE近期发布在Udacity上的官方教程不方便科学上网的同学可以从我的百度网盘里下载。AndroidPerformancePatterns是GOOGLE在年初发

标签: fragment detach

本文链接地址:https://www.jiuchutong.com/biancheng/379631.html 转载请保留说明!

上一篇:[android警告]AndroidManifest.xml警告 Not targeting the latest versions of Android(android studio警告)

下一篇:Android使用ViewFlipper实现Switch动画特效(Android使用教程)

  • 非货币性资产交换补价大于25%的会计处理
  • 营业执照办理税务登记需要什么资料
  • 企业保持存货的必要性是什么
  • 往来差异一般原因有哪些
  • 劳务公司劳务协议范本
  • 审核通过的红字发票怎么作废
  • 一般纳税人销项开普票,进项票可以抵扣吗
  • 收到违约金如何入账
  • 事业单位个税可以抵扣吗
  • 临时工人工资原始凭证怎么做及会计分录解析?
  • 公司注销库存商品转营业外收入
  • 共用水电费税前扣除比例
  • 在建工程预付款项记入什么会计科目
  • 不动产证上宗地图名字错一个字
  • 财产租赁合同印花税率多少
  • 一般纳税人运费计入什么科目
  • 反写是清卡的意思吗
  • 哪种情形
  • 为什么债务利息不计入资本预算的范畴
  • 每期折旧怎么算
  • 专票记账联丢失了要罚款吗
  • 财务费用算营业利润吗
  • 分支机构的季度所得税务报表是填合并报表吗
  • 供应商赠送的原材料怎么做分录
  • 领取劳保用品如何做凭证怎么做会计分录?
  • 电脑开机后一直滴滴
  • 运费从货款中扣除后付款分录怎么做
  • 汽车零部件的成本核算
  • 工程筹建期间发票怎么开
  • 出差人员餐费,进项可以抵扣吗
  • 出口退税的会计分录实例
  • 承兑找零怎么做凭证
  • 苹果怎么设置屏保和壁纸
  • 可以关闭系统的快捷键
  • 收到发票已入账,退回怎么做账
  • PHP:pg_lo_create()的用法_PostgreSQL函数
  • oeloader.exe - oeloader是什么进程 有什么用
  • php数据库连接失败怎么办
  • php declare
  • 公司资金被税务部门冻结
  • 房屋出租房产税如何计算
  • php代码提示
  • php框架symfony
  • 计算完工产品成本和在产品成本的方法有哪些
  • php获取当前访问目录
  • php实现数据库查询
  • ChatGPT在热门行业的应用场景有哪些
  • 电子回单是什么样子
  • 预存5000送2000什么套路
  • 通用定额发票能当餐饮发票报销吗
  • 不动产租赁专票对房产有无影响
  • 爬虫技术是做什么的
  • 食用油交税吗
  • 销售设备提供安装服务
  • 图书发行税率
  • 建筑安装增值税税率变更过程
  • 企业发生坏账损失时,在当期确认坏账损失
  • 暂估成本以后也没有票回来了
  • 基金会收到捐款的会计分录
  • 银行存款日记账对方科目两个怎么办
  • 加盟店直营店什么意思
  • 支票有效期10天是自然日还是工作日
  • mysql数据库使用教程
  • 没有vcd怎么放光盘
  • Win10自带输入法打不出中文
  • linux如何读取nvme信息
  • 显示隐藏文件也看不到
  • schedhlp.exe - schedhlp是什么进程 作用是什么
  • ngctw32.exe - ngctw32是什么进程 有什么用
  • win7怎么查看电池信息
  • Linux中的stat命令使用简介
  • 给网页添加javascript
  • 批处理语言 从入门到精通
  • 怎么优化项目
  • js倒计时秒杀
  • js类库编写
  • jquery给按钮添加事件
  • 留抵税额过多怎么办
  • 国有企业租赁经营 河北省
  • 地税怎么查个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设