HTTPS://WWW.CNBLOGS.COM/ANDROID-JOKER/P/4414891.HTML

https://www.cnblogs.com/android-joker/p/4414891.html
https://www.cnblogs.com/android-joker/p/4414891.html

ANDROID FRAMENT的切换(解决REPLACE的低效)

Posted on 2015-04-10 15:58 阿祥当码农 阅读(26150) 评论(2) 编辑 收藏

在项目中切换Fragment,一直都是用replace()方法来替换Fragment。但是这样做有一个问题,每次切换的时候Fragment都会重新实列化,重新加载一次数据,这样做会非常消耗性能用用户的流量。

官方文档解释说:replace()这个方法只是在上一个Fragment不再需要时采用的简便方法。

正确的切换方式是add(),切换时hide(),add()另一个Fragment;再次切换时,只需hide()当前,show()另一个。
这样就能做到多个Fragment切换不重新实例化:

切换方法:

/*** fragment 切换* * @param from* @param to*/public void switchContent(Fragment from, Fragment to, int position) {if (mContent != to) {mContent = to;FragmentTransaction transaction = fm.beginTransaction();if (!to.isAdded()) { // 先判断是否被add过
                transaction.hide(from).add(R.id.content_frame, to, tags[position]).commit(); // 隐藏当前的fragment,add下一个到Activity中} else {transaction.hide(from).show(to).commit(); // 隐藏当前的fragment,显示下一个
            }}}

这样做好后看似没问题。但是比较低端的手机内存不足的时候会造成fragment重叠的情况。

实是由Activity被回收后重启所导致的Fragment重复创建和重叠的问题。

在Activity onCreate()中添加Fragment的时候一定不要忘了检查一下savedInstanceState

多个Fragment重叠则可以这样处理:通过FragmentManager找到所有的UI Fragment,按需要show()某一个Fragment,hide()其他即可!

为了能准确找出所需的Fragment,所以在add()或者replace() Fragment的时候记得要带上tag参数,因为一个ViewGroup 容器可以依附add()多个Fragment,它们的id自然是相同的。

/*** 状态检测 用于内存不足的时候保证fragment不会重叠* * @param savedInstanceState*/private void stateCheck(Bundle savedInstanceState) {if (savedInstanceState == null) {fm = getFragmentManager();FragmentTransaction fts = fm.beginTransaction();AnimationFragment af = new AnimationFragment();mContent = af;fts.add(R.id.content_frame, af);fts.commit();} else {AnimationFragment af = (AnimationFragment) getFragmentManager().findFragmentByTag(tags[0]);PlainFragment pf = (PlainFragment) getFragmentManager().findFragmentByTag(tags[1]);RecordFragment rf = (RecordFragment) getFragmentManager().findFragmentByTag(tags[2]);InformationFragment inf = (InformationFragment) getFragmentManager().findFragmentByTag(tags[3]);TestingFragment tf = (TestingFragment) getFragmentManager().findFragmentByTag(tags[4]);getFragmentManager().beginTransaction().show(af).hide(pf).hide(rf).hide(inf).hide(tf).commit();}}

HTTPS://WWW.CNBLOGS.COM/ANDROID-JOKER/P/4414891.HTML https://www.cnblogs.com/android-joker/p/4414891相关推荐

  1. Android本地服务器NanoHttpd配置Https双向认证

    一. 了解数字证书 在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢? 所谓数字证书,是一种用于电脑的身份识别机制.由数字证书颁发机构(CA)对使用私钥创建 ...

  2. android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估

    文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...

  3. Android Material Design简单使用 http://www.cnblogs.com/android-blogs/p/5632103.html

    Android Material Design简单使用 吐槽 作为一个 Android developer,没有什么比拿着 UI 设计的一堆 iOS 风格的设计 来做需求更恶心的了,基本所有空间都要照 ...

  4. Android studio 使用心得(三)—从Eclipse迁移到Android studio

    断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功 ...

  5. 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...

    第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...

  6. Android开发环境搭建全程演示(jdk+eclip+android sdk)

    Android开发环境搭建全程演示(jdk+eclip+android sdk) http://files.cnblogs.com/Bany/Android%E5%BC%80%E5%8F%91%E7% ...

  7. android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)

    在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...

  8. Android 近百个项目的源代码,覆盖Android开发的每个领域

    Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnMyMeans http://sourceforge.ne ...

  9. android开发环境搭建(ubuntu15.04+jdk8+eclipse+android sdk)

    开始学习android开发,首先对其环境对搭建比较重要.平台可以选择window/linux/mac等,这里,我选择ubuntu系统,方法比较原始,当然也可以直接用google提供的android s ...

最新文章

  1. 一台主机装两个mysql数据库_一台主机装两个mysql数据库
  2. Microsoft R 和 Open Source R,哪一个才最适合你?
  3. 可视化---寻找路径与算法
  4. tree(2018.10.26)
  5. Linux操作问题解答
  6. Python学习相关文档
  7. ios调用系统的短信和发送邮件功能,实现短信分享邮件分享
  8. android ev3 蓝牙连接,乐高EV3蓝牙安装和连接
  9. 安装telnet服务
  10. LeetCode 面试题62. 圆圈中最后剩下的数字 详细题解
  11. 编码方法论:设计数据结构
  12. zynq petalinux编译系统启动文件实战应用
  13. 双向认证---xca--证书产生
  14. Nacos 1.0.1 发布,社区一起定义的 Nacos
  15. 2023年北京科技大学MTI英语翻译硕士专业考研成功经验
  16. html mp4无法播放,关于HTML5中Video标签无法播放mp4的解决办法
  17. 扩展坞连接电脑没有反应的处理方法
  18. csdn下载积分兑换网址
  19. UIKeyboard 键盘
  20. 维护盘pe linux,不进入pe系统也能轻松维护硬盘,简直神器!

热门文章

  1. 2023全新小鬼授权系统PHP源码完全解密版
  2. 案例研究 | 初创公司 Savioke 用设计冲刺为酒店设计机器人方案
  3. scrapy框架03
  4. 2021年全球氢溴酸收入大约862.7百万美元,预计2028年达到1401.4百万美元
  5. 云速汉字、组词、拼音、造句、用法、音标采集软件
  6. 用友华表Cell表批量删除操作及bug解决
  7. 爬取汽车之家,新车销售情况,看看大家选车的侧重点在哪
  8. word撰写格式系列1——毕业论文格式设置
  9. HTML 网页计数器
  10. EPIC是什么平台?