FragmentTransaction與Fragment生命週期的關係

在Android中,對Fragment的操做都是經過FragmentTransaction來執行。而從Fragment的結果來看,FragmentTransaction中對Fragment的操做大體能夠分爲兩類:html

  • 顯示:add() replace() show() attach()
  • 隱藏:remove() hide() detach()

對於每一組方法,雖然最後產生的效果相似,但方法背後帶來的反作用以及對Fragment的生命週期的影響都不盡相同。android

add() vs. replace()

只有在Fragment數量大於等於2的時候,調用add()仍是replace()的區別才能體現出來。當經過add()連續兩次添加Fragment的時候,每一個Fragment生命週期中的onAttach()-onResume()都會被各調用一次,並且兩個FragmentView會被同時attachcontainerViewsegmentfault

addadd

一樣,退出Activty時,每一個Fragment生命週期中的onPause()-onDetach()也會被各調用一次。api

addaddstop

但當使用replace()來添加Fragment的時候,第二次添加會致使第一個Fragment被銷燬,即執行第二個FragmentonAttach()方法以前會先執行第一個FragmentonPause()-onDetach()方法,同時containerView會detach第一個FragmentViewapp

replace

show() & hide() vs. attach() & detach()

調用show() & hide()方法時,Fragment的生命週期方法並不會被執行,僅僅是FragmentView被顯示或者​隱藏。並且,儘管FragmentView被隱藏,但它在父佈局中並未被detach,仍然是做爲containerViewchildView存在着。相比較下,attach() & detach()作的就更完全一些。一旦一個Fragmentdetach(),它的onPause()-onDestroyView()週期都會被執行。ide

detach

同時FragmentView也會被detach。在從新調用attach()後,onCreateView()-onResume()週期也會被再次執行。佈局

attach

remove()

其實看完上面的分析,remove()方法基本也就明白了。相對應add()方法執行onAttach()-onResume()的生命週期,remove()就是完成剩下的onPause()-onDetach()週期。動畫

remove

總結

除了上面這些核心的api外,FragmentTransaction還提供了更多的方法以豐富Fragment的操做,如爲Fragment的顯示和隱藏添加動畫。具體使用方法能夠參閱api文檔。
spa

http://developer.android.com/reference/android/app/FragmentTransaction.htmlcode

相關文章
相關標籤/搜索