您的位置:首页 > 移动开发 > Android开发

FragmentTransaction与Fragment生命周期的关系

2015-04-13 19:09 585 查看
http://segmentfault.com/a/1190000000650573

在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文档。



http://developer.android.com/reference/android/app/FragmentTransaction.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Fragment