2

更重要的是,在onCreate/onCreateView我已經調用FragmentManager.findFragmentByTag()查找我的片段的任何現有的實例,它似乎找到它。FragmentManager.put/getFragment vs findFragmentByTag

那麼putFragment/getFragment有什麼意義呢?它會節省額外的東西還是會導致額外的生命週期事件發生?它只是findFragmentByTag()的一個替代方法,它或多或少地做了同樣的事情?因爲在我看來,片段正在自動爲我保存而無需使用FragmentManager.putFragment()。

+0

請參閱http://stackoverflow.com/questions/6446961/when-to-use-fragmentmanagerputfragment-and-getfragment – 2014-12-02 02:28:21

+0

該問題與此問題不一樣,其答案也不涉及FragmentManager的先天狀態保存行爲以任何方式。 **編輯問題標題,使其更清晰 – 2014-12-02 02:49:06

回答

3

那麼putFragment/getFragment有什麼意義?

根據當前實現,putFragment(Bundle bundle, String key, Fragment fragment)所做的是將片段的索引放入帶有參數關鍵字的包中。然後getFragment(Bundle bundle, String key)在相同的索引處獲取片段,該索引可以使用相同的密鑰從包中檢索。 Fragment只有在被添加到FragmentManager中後,纔會在FragmentManager中創建它的索引,所以putFragment()只有在被添加後才能在Fragment上調用。

是否會節省額外的東西或導致額外的生命週期的東西 發生?

它只保存片段的索引,沒有更多的東西,也不會導致任何額外的生命週期的東西。

它只是一個替代findFragmentByTag()做更多或 不太相同的東西嗎?

是的,我thik所以。

根據目前的實現,putFragment/getFragment也可以實現findFragmentByTag()。但是putFragment/getFragment的功能非常有限,因爲如果沒有bundle參數,你不能使用它,這意味着你必須在onSaveInstanceState()中調用putFragment()

+0

感謝您的更詳細的回覆。我想用put/get也許在某些情況下比使用findFragmentByTag()更容易閱讀...無論如何,我可能會繼續使用標籤,因爲它可以優雅地處理可能會或可能不會添加片段的場景。 – 2014-12-02 07:27:34

0

看起來像putFragment/getFragment它只是一個安全的方式來存儲片段及其狀態在片段管理器中而不顯示它。

例如,您有2個片段存儲在您的活動字段中。您顯示其中一個,然後在您更改屏幕方向後再替換它。您的活動中的字段會被重新啓動,但當前顯示的片段會保存其狀態,其他則不會。但是,如果您將片段存儲在片段管理器中,則會有兩個片段與實際狀態。

+0

我的理解是,使用替換等同於從FragmentManager中刪除片段,並且putFragment()只能在當前添加到fragmentmanager的片段上運行? – 2014-12-02 02:55:49

+0

@ HunterGuy2這是正確的,但實際上它是兩個分開的存儲。如果您通過事務添加片段,則意味着您將其顯示並存儲在片段管理器中,但是當您使用put/get時,只是將其存儲而不顯示,與可見片段分開 – Stepango 2014-12-02 08:37:36

+0

我的觀點是我認爲如果它不可用還沒有添加,如果添加,那麼它並不重要。 – 2014-12-03 19:52:11

相關問題