2015-05-05 115 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