Fragment专辑(三):Fragment的添加(add)和替换(replace)的不同
所有的文章都是自己的经验和总结,如果有错误的地方欢迎留言指正,以免影响其他的少年。
上一篇有提到一个知识点:
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)的不同相关推荐
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[正文] 一.接口回调的简单引入: 我们先来看一个简单的接口回调的例子: 新建一个Java工程,然后新建一个包.然后新建一个A.java文件: A.java代码如下: 1 package com.cn ...
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...
- android fragment动态加载,动态添加Fragment
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 动态添加Fragment 在程序运行时, 根据具体情况来动态地添加Fragment到Activity中. 1 新建 An ...
- android fragment 优势,Android Fragment详解
参考网址:Android Fragment详解 一.什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片.Fragment是依赖于Activity的,不能独立存在 ...
- 你真的会用Fragment吗?Fragment复用的那些事儿
如未特殊说明,本文中的知识点适用于 Activity 重建的时候,即: public void onCreate(Bundle savedInstanceState) {super.onCreate( ...
- ViewPager+Fragment刷新更新Fragment
需求如下:顶部UI(这里随便写的),一些标签(服务器给的,这里写死),切换标签展示不同内容,内容分页展示,要求可以下拉刷新(重要页面,没刷新太low了吧),刷新之后还停在当前标签下面,但是内容也要刷新 ...
- android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)
之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...
- android fragment概念,android Fragment相关概念简介
Fragment fragment是一种控制器对象,activity可委派它完成一些任务,通常这些任务就是管理用户界面,受管理的用户界面可以是一整屏或是整屏的一部分, 管理用户界面的fragment又 ...
- Android Fragment中嵌套Fragment,不显示view
原文链接:http://www.jianshu.com/p/e146698482f5 先看一段错误代码,这段代码写在一个 Fragment 中: private void initView(){mVi ...
最新文章
- 关于js选项卡的一些问题
- Source Insight中的多行注释
- vmware centos 7 更新vmware-tools
- 完成DI 依赖注入功能
- 让主页或Blog日访问量增加3000
- Magento: 自定义用户登录导向页面 Redirect Customer to Previous Page After Login
- Docker小结(五)
- VSCode:vs code不识别wxss小程序相关文件
- 为VMware ESXi主机添加本地存储的过程及注意事项-之3
- C++--第27课 - 动态类型识别
- sas9.3软件java_SAS9.3 64位版Win7安装指引
- X.U.S.T的《自己搭建IIS找ASP程序漏洞》发表在《黑客X档案》,稿费捐给希望工程
- go int转byte
- Hadoop-HDFS学习
- IOS Xcode 开发适配最低IOS版本 适配POD库
- Android真机连接局域网PC服务器的方法
- 实现一个对Django Models数据进行模拟的Mock方案
- nds文件解包_下載wwpacker 1.84 更新 給wad解包和封包的工具
- 【域自适应】Dual Path Learning for Domain Adaptation of Semantic Segmentation
- Python自动签退脚本