2012-07-21 112 views

回答

1

是的,如果他們必須保留配置更改,您可以將它用於不在回棧中的碎片。它只是讓事情變得更簡單。

參見https://stackoverflow.com/a/8550351/1300995

+0

我們如何保留在堆棧中維護的片段的配置更改。因爲我們不能使用'setRetainInstance(true)' – Dory 2014-04-04 13:20:15

2

這並不總是好的,沒有。通過保留實例,您告訴'您的舊Android可以給您一個完全相同的Fragment實例,即從未調用片段的onDestroy,而是在onAttach(ed)和onDetach(ed)上。

通常情況下,您需要重新流動視圖以利用不同屏幕比例作爲方向更改的結果(例如),並讓您的片段保留其狀態將意味着框架不會嘗試使用例如,如果以肖像模式啓動,您的「風景友好」視圖。

onRetainInstance的影響是微妙的,它不是銀彈。謹慎操作。

+0

我們如何保留維護在後端堆棧中的碎片的配置更改。因爲我們不能使用'setRetainInstance(true)' – Dory 2014-04-04 13:22:16

+4

這是不正確的,即使你在片段上調用了'setRetainInstance(true)',它的'onCreateView()'方法也會被再次調用,並且因此它會再次被佈局 – nbarraille 2015-08-07 03:50:09

+1

剛剛重新確認了行爲,我可以看到@nbarraille指的是什麼,以前當我在2012年編寫這個答案的時候,如果你在onCreateView下有兩個佈局,在不同的資源限定符-port或-land下,那麼通過使用setRetainInstance(true)將意味着起始佈局將在屏幕旋轉中重複使用。這似乎不再是這種情況了。請放心,以前此調用主要存在一些細微問題;請參見http://go.ie)。 /問題/ 10456077/NullPointerException異常功能於fragmentmanager / – OceanLife 2015-08-07 12:30:41

相關問題