HTTPS://WWW.CNBLOGS.COM/ANDROID-JOKER/P/4414891.HTML https://www.cnblogs.com/android-joker/p/4414891
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切换不重新实例化:
切换方法:
![](/assets/blank.gif)
/*** 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,显示下一个 }}}
![](/assets/blank.gif)
这样做好后看似没问题。但是比较低端的手机内存不足的时候会造成fragment重叠的情况。
实是由Activity被回收后重启所导致的Fragment重复创建和重叠的问题。
在Activity onCreate()
中添加Fragment的时候一定不要忘了检查一下savedInstanceState
:
多个Fragment重叠则可以这样处理:通过FragmentManager
找到所有的UI Fragment
,按需要show()某一个Fragment,hide()其他即可!
为了能准确找出所需的Fragment,所以在add()
或者replace()
Fragment的时候记得要带上tag
参数,因为一个ViewGroup 容器可以依附add()
多个Fragment,它们的id
自然是相同的。
![](/assets/blank.gif)
/*** 状态检测 用于内存不足的时候保证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();}}
![](/assets/blank.gif)
HTTPS://WWW.CNBLOGS.COM/ANDROID-JOKER/P/4414891.HTML https://www.cnblogs.com/android-joker/p/4414891相关推荐
- Android本地服务器NanoHttpd配置Https双向认证
一. 了解数字证书 在HTTPS的传输过程中,有一个非常关键的角色--数字证书,那什么是数字证书?又有什么作用呢? 所谓数字证书,是一种用于电脑的身份识别机制.由数字证书颁发机构(CA)对使用私钥创建 ...
- android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估
文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...
- Android Material Design简单使用 http://www.cnblogs.com/android-blogs/p/5632103.html
Android Material Design简单使用 吐槽 作为一个 Android developer,没有什么比拿着 UI 设计的一堆 iOS 风格的设计 来做需求更恶心的了,基本所有空间都要照 ...
- Android studio 使用心得(三)—从Eclipse迁移到Android studio
断断续续的也算是把eclipse上的代码成功迁移到android studio上来了,现在,我同事继续用eclipse,我用android studio,svn上还是之前eclipse的项目,迁移成功 ...
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)...
第四章.Android编译系统与定制Android平台系统 4.1Android编译系统 Android的源码由几十万个文件构成,这些文件之间有的相互依赖,有的又相互独立,它们按功能或类型又被放到不同 ...
- Android开发环境搭建全程演示(jdk+eclip+android sdk)
Android开发环境搭建全程演示(jdk+eclip+android sdk) http://files.cnblogs.com/Bany/Android%E5%BC%80%E5%8F%91%E7% ...
- android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)
在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...
- Android 近百个项目的源代码,覆盖Android开发的每个领域
Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnMyMeans http://sourceforge.ne ...
- android开发环境搭建(ubuntu15.04+jdk8+eclipse+android sdk)
开始学习android开发,首先对其环境对搭建比较重要.平台可以选择window/linux/mac等,这里,我选择ubuntu系统,方法比较原始,当然也可以直接用google提供的android s ...
最新文章
- 一台主机装两个mysql数据库_一台主机装两个mysql数据库
- Microsoft R 和 Open Source R,哪一个才最适合你?
- 可视化---寻找路径与算法
- tree(2018.10.26)
- Linux操作问题解答
- Python学习相关文档
- ios调用系统的短信和发送邮件功能,实现短信分享邮件分享
- android ev3 蓝牙连接,乐高EV3蓝牙安装和连接
- 安装telnet服务
- LeetCode 面试题62. 圆圈中最后剩下的数字 详细题解
- 编码方法论:设计数据结构
- zynq petalinux编译系统启动文件实战应用
- 双向认证---xca--证书产生
- Nacos 1.0.1 发布,社区一起定义的 Nacos
- 2023年北京科技大学MTI英语翻译硕士专业考研成功经验
- html mp4无法播放,关于HTML5中Video标签无法播放mp4的解决办法
- 扩展坞连接电脑没有反应的处理方法
- csdn下载积分兑换网址
- UIKeyboard 键盘
- 维护盘pe linux,不进入pe系统也能轻松维护硬盘,简直神器!