FragmentTransaction与Fragment生命周期的关系
2015-12-11 09:25
246 查看
在Android中,对
显示:
隐藏:
对于每一组方法,虽然最后产生的效果类似,但方法背后带来的副作用以及对Fragment的生命周期的影响都不尽相同。
只有在
同样,退出
但当使用
调用
同时
其实看完上面的分析,
除了上面这些核心的api外,
Fragment的操作都是通过
FragmentTransaction来执行。而从
Fragment的结果来看,
FragmentTransaction中对
Fragment的操作大致可以分为两类:
显示:
add() replace() show() attach()
隐藏:
remove() hide() detach()
对于每一组方法,虽然最后产生的效果类似,但方法背后带来的副作用以及对Fragment的生命周期的影响都不尽相同。
add() vs. replace()
只有在Fragment数量大于等于2的时候,调用
add()还是
replace()的区别才能体现出来。当通过
add()连续两次添加
Fragment的时候,每个
Fragment生命周期中的
onAttach()-onResume()都会被各调用一次,而且两个
Fragment的
View会被同时
attach到
containerView。
同样,退出
Activty时,每个
Fragment生命周期中的
onPause()-onDetach()也会被各调用一次。
但当使用
replace()来添加
Fragment的时候,第二次添加会导致第一个
Fragment被销毁,即执行第二个
Fragment的
onAttach()方法之前会先执行第一个
Fragment的
onPause()-onDetach()方法,同时
containerView会detach第一个
Fragment的
View。
show() & hide() vs. attach() & detach()
调用show() & hide()方法时,
Fragment的生命周期方法并不会被执行,仅仅是
Fragment的
View被显示或者隐藏。而且,尽管
Fragment的
View被隐藏,但它在父布局中并未被detach,仍然是作为
containerView的
childView存在着。相比较下,
attach() & detach()做的就更彻底一些。一旦一个
Fragment被
detach(),它的
onPause()-onDestroyView()周期都会被执行。
同时
Fragment的
View也会被
detach。在重新调用
attach()后,
onCreateView()-onResume()周期也会被再次执行。
remove()
其实看完上面的分析,remove()方法基本也就明白了。相对应
add()方法执行
onAttach()-onResume()的生命周期,
remove()就是完成剩下的
onPause()-onDetach()周期。
总结
除了上面这些核心的api外,FragmentTransaction还提供了更多的方法以丰富
Fragment的操作,如为
Fragment的显示和隐藏添加动画。具体使用方法可以参阅api文档。
相关文章推荐
- 192.168.0.1/24子网的概念
- ASP.NET html转图片
- 打开蓝牙设备
- 动态内存分配
- LeetCode 224 Basic Calculator
- 第十三周--数据结构-Kruskal算法的验证
- 静态(static)、虚拟(virtual)、动态(dynamic)或消息处理(message)
- boost中unordered_map的用法
- nodejs模块——Event模块
- Mysql中的常用工具
- 第9周项目4广义表算法库及应用2
- MySQL: 1006 - Can't create database '***' (errno: 13) 错误 解决方法
- 找论文资料方式
- org.tigris.subversion.javahl.ClientException: Attempted to lock an already-locked dir异常解决方法 【转】
- 第十三周项目3 Dijkstra算法
- 硬件要求
- shell中如何delay
- Log4net入门使用(转)
- 特征点检测学习_2(surf算法)
- 解决adb not responding if youd like to retry...错误