2013-07-22 54 views
0

我有一個小應用程序,它有一個單獨的Activity並顯示片段中的內容。因此,我通過用下一個替換當前片段(並將它們放在後端堆棧中)來瀏覽我的應用程序。FragmentTransaction onSaveInstanceState

該應用程序被鎖定在肖像中,因此該活動永遠不會被銷燬。

所以我的問題是,在導航到片段B之前,如何保存片段A的「實例狀態」,並在按下後退按鈕並且片段A將再次顯示在屏幕上時恢復實例狀態。

據我所知,在片段中的onSaveInstanceState被綁定到activites生命週期,並且只有在活動被破壞時才被調用。由於即時通訊使用單個活動並使用片段事務,因此活動永遠不會被銷燬,因此onSaveInstanceState永遠不會被調用。

所以我嘗試的第二種方法是使用Fragment.getArguments()和Fragment.setArguments()。 但是,一旦碎片已被實例化,我不能改變參數(IllegalStateException)。

因此,任何其他的想法或提示如何處理這種情況下的片段實例狀態(單個活動,使用片段事務)?

+0

請閱讀此處:http://developer.android.com/guide/components/fragments.html#Lifecycle,http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack%28java。 .Sarry,當它足夠讀取10行時,很難提供洞察力。我將在下次複製粘貼。 –

+0

我已閱讀文檔,但無法弄清楚你的意思。 – sockeqwe

回答

0

使用Bundle將實例保存在onDestroyView()中,然後在onCreateView()中檢索它們。

+1

如何在onDestroyView()中保存實例狀態? – sockeqwe

+0

也許你可以在包含這些碎片的活動中保存捆綁包。 :) –

+0

我在這裏找到了一個相關的問題。希望它有幫助。 http://stackoverflow.com/questions/15313598/once-for-all-how-to-correctly-save-instance-state-of-fragments-in-back-stack –