在Android中,對Fragment
的操做都是經過FragmentTransaction
來執行。而從Fragment
的結果來看,FragmentTransaction
中對Fragment
的操做大體能夠分爲兩類:html
add() replace() show() attach()
remove() hide() detach()
對於每一組方法,雖然最後產生的效果相似,但方法背後帶來的反作用以及對Fragment的生命週期的影響都不盡相同。android
只有在Fragment
數量大於等於2的時候,調用add()
仍是replace()
的區別才能體現出來。當經過add()
連續兩次添加Fragment
的時候,每一個Fragment
生命週期中的onAttach()-onResume()
都會被各調用一次,並且兩個Fragment
的View
會被同時attach
到containerView
。segmentfault
一樣,退出Activty
時,每一個Fragment
生命週期中的onPause()-onDetach()
也會被各調用一次。api
但當使用replace()
來添加Fragment
的時候,第二次添加會致使第一個Fragment
被銷燬,即執行第二個Fragment
的onAttach()
方法以前會先執行第一個Fragment
的onPause()-onDetach()
方法,同時containerView
會detach第一個Fragment
的View
。app
調用show() & hide()
方法時,Fragment
的生命週期方法並不會被執行,僅僅是Fragment
的View
被顯示或者隱藏。並且,儘管Fragment
的View
被隱藏,但它在父佈局中並未被detach,仍然是做爲containerView
的childView
存在着。相比較下,attach() & detach()
作的就更完全一些。一旦一個Fragment
被detach()
,它的onPause()-onDestroyView()
週期都會被執行。ide
同時Fragment
的View
也會被detach
。在從新調用attach()
後,onCreateView()-onResume()
週期也會被再次執行。佈局
其實看完上面的分析,remove()
方法基本也就明白了。相對應add()
方法執行onAttach()-onResume()
的生命週期,remove()
就是完成剩下的onPause()-onDetach()
週期。動畫
除了上面這些核心的api外,FragmentTransaction
還提供了更多的方法以豐富Fragment
的操做,如爲Fragment
的顯示和隱藏添加動畫。具體使用方法能夠參閱api文檔。
spa
http://developer.android.com/reference/android/app/FragmentTransaction.htmlcode