2012-12-04 127 views
10

在Android docs的FragmentTransaction項目中,描述了方法replace()與爲當前視圖中添加的所有片段調用方法remove()相同,然後調用方法add()。在這種情況下,爲了恢復以前的片段,我們可以使用addBackToStack(),這意味着事務狀態仍然由片段管理器管理,並在我們彈出堆棧時反轉其操作。在FragmentTransaction中使用add()。addToBackStack(),add()。detach()和replace()。addToBackStack()之間有什麼區別?

在另一方面,當我們執行使用add()成交,超出使用add().addBackToStack(),我們可以使用detach()方法和恢復使用attach()的片段,它們具有相同的行爲addBackToStack()

那麼這些場景之間幕後的區別是什麼?

回答

11

我研究得更多,很明顯,detach()addToBackStack()之間的區別是在Fragment的生命週期中。當我們在背堆棧中添加片段時,會依次調用方法onPause()onStop()onDestroyView()之後。在這種狀態下,片段清理與其視圖相關的資源,並「等待」再次被調用。僅從片段繪製其用戶界面,返回到背堆棧的佈局稱爲方法onCreateView()。實際上,片段不會被破壞。

在另一邊,當我們使用detach()移除或替換片段,被稱爲在序列中的所有相同的方法引用第(onPause(), onStop(), onDestroyView())添加此兩種方法:onDestroy(),做片段的狀態和 的最後清理onDetach ()將片段分離爲不再與其活動關聯。

基本上,在幕後,他們不具有相同的行爲:使用addToBackStack()的碎片仍然實例化,並且不使用detach()

相關問題