FragmentTransaction与Fragment生命周期的关系
来源:互联网 发布:pdb蛋白质数据库 编辑:程序博客网 时间:2024/05/16 18:18
在Android中,对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文档。
- FragmentTransaction与Fragment生命周期的关系
- FragmentTransaction与Fragment生命周期的关系
- FragmentTransaction与Fragment生命周期的关系
- FragmentTransaction与Fragment生命周期的关系
- FragmentTransaction与Fragment生命周期的关系
- FragmentTransaction与Fragment生命周期的关系
- Android之FragmentTransaction与Fragment生命周期的关系
- Viewpager和FragmentTransaction、Fragment生命周期的关系
- fragmentTransaction与fragment生命周期
- FragmentTransaction管理的Fragment生命周期状态
- FragmentTransaction管理的Fragment生命周期状态
- fragment的生命周期与activity的关系
- Fragment生命周期及其与activity的关系
- Fragment生命周期及其与activity的关系
- Android Fragment的FragmentTransaction 操作和对应的生命周期变化
- 【Android】Activity与Fragment的生命周期的关系
- 小结Fragment与FragmentPagerAdapter的生命周期及其关系
- Activity与Fragment生命周期及之间的关系
- JarURLConnection用途
- 安装linux学习三(2):CentOS 5.5下安装MySQL 5.5全过程分享
- Xcode升级后插件失效的原理与修复办法
- property Animaton属性动画
- 192.168.0.1/24子网的概念
- FragmentTransaction与Fragment生命周期的关系
- 常用linux指令(centos版)
- Cmder+Sublime Text“基友”实验
- Java之包和接口
- 将struts2和hibernate结合实现一个简单的小程序(一)
- 高德地图初步使用-定位
- Linux LVM管理——DM的管理
- Jquery easyui从零单排之datagrid查询
- CentOS下SVN安装及配置图解教程