最近在开发一款软件,用到了Fragment,这是是动态加载Fragment,通过FragmentTransaction 对 Fragment做转换,FragmentTransaction 的方法有几种,对Fragment的生命周期有所影响。
- 显示:
add() replace() show() attach()
- 隐藏:
remove() hide() detach()
add() vs. replace()
只有在Fragment
数量大于等于2的时候,调用add()
还是replace()
的区别才能体现出来。当通过add()
连续两次添加Fragment
的时候,每个Fragment
生命周期中的onAttach()-onResume()
都会被各调用一次,而且两个Fragment
的View
会被同时attach
到containerView
。
show() & hide() vs. attach() & detach()
调用show() & hide()
方法时,Fragment
的生命周期方法并不会被执行,仅仅是Fragment
的View
被显示或者隐藏。而且,尽管Fragment
的View
被隐藏,但它在父布局中并未被detach,仍然是作为containerView
的childView
存在着。相比较下,attach() & detach()
做的就更彻底一些。一旦一个Fragment
被detach()
,它的onPause()-onDestroyView()
周期都会被执行。
remove()
其实看完上面的分析,remove()
方法基本也就明白了。相对应add()
方法执行onAttach()-onResume()
的生命周期,remove()
就是完成剩下的onPause()-onDetach()
周期。
大家还可以看看这个