位置: 编程技术 - 正文

谈谈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使用教程)

  • 工商年报资产状况纳税总额怎么计算?
  • 印花税滞纳金如何计算日期
  • 非税收入票据能否税前扣除
  • 出口货物退税的基本原则
  • 红冲以前年度的费用怎么做账
  • 个体工商户能否开13的专票
  • 未开收入下月开票怎样做分录
  • 事业单位破产清算程序规定
  • 新会计准则适用企业
  • 原材料加工费怎么入账的
  • 合同副本和正本区别
  • 员工离职 社保
  • 软件开发服务费会计分录
  • 所得税费用按月还是按年算
  • 公司用窗帘用什么颜色
  • 新企业残保金免交三年超过30人
  • 事业单位事业收入和经营收入要上缴财政
  • 超市预付卡发票如何入账
  • 企业承担社保
  • 计提工资附加费啥意思
  • 企业成本费用包含
  • 政府会计财政拨款收入借贷方向
  • windows打开文件
  • 在win7中,当前窗口的数量是多少个
  • 简要说明php web的工作流程
  • 伦德格伦
  • 跨年度广告费需不需要摊销
  • 稽查查补销售额后补开票如何申报
  • 罚款属于应付账款吗
  • php7.3
  • 金蝶迷你版怎么安装
  • repo命令详解
  • 软件企业高新技术产品证明材料
  • 购买方已认证怎么开具红字信息表
  • 预收款预缴增值税如何核算的
  • 金税盘怎么增加收款人和复核人
  • mysql内连接查询使用汉语作为官方语言的所有国家
  • 帝国cms使用手册
  • 分公司税务登记流程与操作手册
  • 法人与财务负责人不应为同一人
  • 公司帮员工全额买社保该怎么入账?
  • 公司交1500五险一金是什么水平
  • 劳务费怎么做账务处理
  • 股东以固定资产入股会计处理
  • 企业赠送个人房产 所得税
  • 应收账款余额不平是什么原因
  • 去银行提取备用金不是会计本人需要给谁打电话
  • 销售折让如何做分录
  • 制造费用和生产成本期末有余额吗
  • 无法确定退货率的处理
  • 固定资产发票未到可以确认固定资产吗
  • 企业筹建期间利润计算
  • 没有申报未开票收入怎么办
  • 工资条上为什么不显示生育险
  • 商业折扣入账
  • 制造费用按什么设置明细
  • 建立备查账的是
  • mysql数据库高可用架构
  • 微软补丁修复时出现蓝屏现象
  • Windows Server 2003关闭启动后的Ctrl+Alt+Del选项和关机时的时间跟踪程序方法
  • linux服务端
  • Fedora 9 texlive + vim-latex + kile安装配置
  • linux cwd
  • centos作用
  • appservicesdkscripterror
  • 怎么给文件夹设置密码保护
  • win7怎么让系统更加快
  • ssh permission denied password
  • mx1014
  • Win10锁屏壁纸怎么换
  • shell程序中定义的函数能不能有参数
  • 批处理命令在哪个菜单中
  • Android -- service两种启动方式startService与bindService
  • sed删除文件中的目录
  • android Lollipop(5.0)--touch feedback(触摸反馈)
  • javascript教程完整版
  • 江苏常州税务局电话人工服务电话
  • 河南省城镇土地使用税优惠政策2020
  • 缴纳个人所得税怎么计算
  • 投诉政府平台在哪里投诉
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设