所有的文章都是自己的经验和总结,如果有错误的地方欢迎留言指正,以免影响其他的少年。

上一篇有提到一个知识点:

transaction.commit();
transaction.commitAllowingStateLoss();
复制代码

先提前说明:两者都可以提交fragment的操作,唯一的不同是第二种方法,允许丢失一些界面的状态和信息,几乎所有的开发者都遇到过这样的错误:无法在activity调用了onSaveInstanceState之后再执行commit(),这种异常时可以理解的,界面被系统回收(界面已经不存在),为了在下次打开的时候恢复原来的样子,系统为我们保存界面的所有状态,这个时候我们再去修改界面理论上肯定是不允许的,所以为了避免这种异常,要使用第二种方法。

前面两篇文章简单的介绍了Fragment的简单用法,这一篇准备介绍一下常用的Fragment的添加和替换有什么不同。

添加和替换,是最常用的两个方法,从字面的意思上看能够非常明确的理解,添加就是往容器中添加(add),替换(replace)则是把容器清空再添加,也就是把容器中的所有内容都替换掉。

首先获取FragmentTransaction对象:

FragmentTransaction transaction = fm.beginTransaction();
复制代码

添加

transaction.add(R.id.fragment_container, oneFragment).commit();
复制代码

第一个参数是容器id, 第二个参数是要添加的fragment,添加不会清空容器中的内容,不停的往里面添加,值得强调的是,如果一个fragment已经进来的话,再次添加的话会报异常错误的,不重复添加同一fragment,这是非常重要的特点。

添加进来的fragment都是可见的(visible),后添加的fragment会展示在先添加的fragment上面,在绘制界面的时候会绘制所有可见的view,所以大多数add都是和hide或者是remove同时使用的,例如:

transaction.add(R.id.fragment_container, oneFragment).hide(twoFragment)commit();
复制代码

这样可以节省绘制界面的时间,节省内存消耗,是推荐的用法。

替换

 transaction.replace(R.id.fragment_container, oneFragment).commit();
复制代码

替换会把容器中的所以内容全都替换掉,有一些app会使用这样的做法,保持只有一个fragment在显示,减少了界面的层级关系。

不同之处

就是是否要清空容器再添加fragment的区别,用法上add配合hide或是remove使用,replace一般单独出现。

相同之处

每次add和replace都要重新走一遍fragment 的周期。

其实fragment一般不会这么简单使用,replace的使用场景一般不多,大多数是添加(add)和显示(show)配合隐藏(hide)来使用,这样首先避免相同类型的fragment的重复添加,提示开发者使用单例模式,已经添加过的fragment很多情况没有必要再次添加,而且还有把生命周期再走一遍,这是一种比较浪费的做法,所以下一篇,介绍一下fragment的最常用的用法。

Fragment专辑(三):Fragment的添加(add)和替换(replace)的不同相关推荐

  1. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    [正文] 一.接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包.然后新建一个A.java文件: A.java代码如下: 1 package com.cn ...

  2. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  3. android fragment动态加载,动态添加Fragment

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 动态添加Fragment 在程序运行时, 根据具体情况来动态地添加Fragment到Activity中. 1 新建 An ...

  4. android fragment 优势,Android Fragment详解

    参考网址:Android Fragment详解 一.什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片.Fragment是依赖于Activity的,不能独立存在 ...

  5. 你真的会用Fragment吗?Fragment复用的那些事儿

    如未特殊说明,本文中的知识点适用于 Activity 重建的时候,即: public void onCreate(Bundle savedInstanceState) {super.onCreate( ...

  6. ViewPager+Fragment刷新更新Fragment

    需求如下:顶部UI(这里随便写的),一些标签(服务器给的,这里写死),切换标签展示不同内容,内容分页展示,要求可以下拉刷新(重要页面,没刷新太low了吧),刷新之后还停在当前标签下面,但是内容也要刷新 ...

  7. android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)

    之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...

  8. android fragment概念,android Fragment相关概念简介

    Fragment fragment是一种控制器对象,activity可委派它完成一些任务,通常这些任务就是管理用户界面,受管理的用户界面可以是一整屏或是整屏的一部分, 管理用户界面的fragment又 ...

  9. Android Fragment中嵌套Fragment,不显示view

    原文链接:http://www.jianshu.com/p/e146698482f5 先看一段错误代码,这段代码写在一个 Fragment 中: private void initView(){mVi ...

最新文章

  1. 关于js选项卡的一些问题
  2. Source Insight中的多行注释
  3. vmware centos 7 更新vmware-tools
  4. 完成DI 依赖注入功能
  5. 让主页或Blog日访问量增加3000
  6. Magento: 自定义用户登录导向页面 Redirect Customer to Previous Page After Login
  7. Docker小结(五)
  8. VSCode:vs code不识别wxss小程序相关文件
  9. 为VMware ESXi主机添加本地存储的过程及注意事项-之3
  10. C++--第27课 - 动态类型识别
  11. sas9.3软件java_SAS9.3 64位版Win7安装指引
  12. X.U.S.T的《自己搭建IIS找ASP程序漏洞》发表在《黑客X档案》,稿费捐给希望工程
  13. go int转byte
  14. Hadoop-HDFS学习
  15. IOS Xcode 开发适配最低IOS版本 适配POD库
  16. Android真机连接局域网PC服务器的方法
  17. 实现一个对Django Models数据进行模拟的Mock方案
  18. nds文件解包_下載wwpacker 1.84 更新 給wad解包和封包的工具
  19. 【域自适应】Dual Path Learning for Domain Adaptation of Semantic Segmentation
  20. Python自动签退脚本

热门文章

  1. 使用Signature Tool自动生成P/Invoke调用Windows API的C#函数声明
  2. 汉诺塔的实现 c++
  3. Linux系统资源监控--linux命令、nmon和spotlight
  4. Hadoop学习笔记—1.基本介绍与环境配置
  5. 一起talk C栗子吧(第一百二十三回:C语言实例--显示变量和函数的地址)
  6. TCP 三次握手过程详解
  7. iOS 模糊化效果 ANBlurredImageView的使用
  8. TabHost选项卡的实现(一):使用TabActivity实现
  9. 对软件体系结构的认识
  10. 可动态扩展的数据库模型设计