2015-05-05 114 views
0

我在一個片段內開發了一個遊戲。涉及許多觀點,甚至更多變數。現在我需要一個恢復按鈕,我想將堆棧中的洞碎片保存起來,當按下回覆按鈕時,我只彈出最後一個碎片並將其替換。在堆棧中保存一個片段的副本以恢復狀態

我的問題是,此堆棧中的任何片段都會更新,因爲用戶界面中發生了一些情況。但是,我需要保存片段的過去狀態。所以它應該被凍結或什麼?那麼我怎樣才能做一個實際的副本,而不是更新的副本。

保存方法

Fragment fragment = fragmentManager.findFragmentById(R.id.container); 
MainActivity.fragmentStack.push(fragment); 

加載方法

Fragment fragment = MainActivity.fragmentStack.pop(); 
ActionBarActivity ac = (ActionBarActivity) root.getContext(); 
FragmentManager fragmentManager = ac.getSupportFragmentManager(); 
fragmentManager.beginTransaction() 
         .replace(R.id.container, fragment) 
         .commit(); 

P.S:當然,我可以一個新片段隨時隨地存儲所有的單變量在構建與存儲的值。但是,我希望將整體存儲在一個片段中。

+0

那麼是什麼阻止你製作你的片段的深層副本?在您的類中添加一個構造函數,將另一個片段作爲參數,創建所有引用變量的副本等。但是,如果您想要一個比第一個答案更真實的解決方案,那麼這是一個非常好的方法。 – AndroidEx

回答

1

片段是一個重要的類,其生命週期必須一致。你不想保存和管理它。

相反,你應該做的是創建一個類,保存該狀態,並使其parcelable。然後有一個片段使用該對象來設置自己。通過使它可以parcelable,它也可以將該對象保存在保存的實例狀態中,這將重新創建片段,並且它的視圖更簡單。

+0

你實際上是用狀態表示我設置的任何單個變量嗎?或者我不能按照你的想法 – Bolic

+0

一個片段應該顯示基於你的應用程序狀態的視圖。所以你需要以某種方式將該狀態傳遞給片段。請記住,在電話方向更改等情況下,碎片和活動可能會被破壞,這就是爲什麼我建議您將該狀態保存在保存的實例狀態中的原因。 – BoredAndroidDeveloper

+0

是的。我想問一下,如果你稱之爲「狀態」,你怎麼稱呼它是一個特定的東西,就像我可以保存的一個單獨的對象,或者你的意思是說明描述狀態的任何變量的組合? – Bolic