在片段中保存和恢复自定义对象

时间:2013-03-07 12:05:18

标签: android bundle fragment

我有两个片段FragmentA和FragmentB。 从片段A i通过将自定义对象作为参数传递给片段B中的方法来更新片段B中的视图。 例如,下面是片段B:

public class FragmentB extends Fragment {

private ArrayList<String> customObj = new ArrayList<String>();

        public void updateViews(ArrayList<String> obj) {
                customObj = obj;

         }

    @Override
        public void onSaveInstanceState(Bundle outState) {
        System.out.println("Custom Object : "+customObj);//custom object is always  empty
        }

现在,每当我旋转屏幕时,自定义对象都是空的。

注意 这里我只是更新Fragement B的视图。该对象作为参数从Fragment A传递给Fragment B的方法updateViews。 另外,我不期待为自定义对象定义静态。

1 个答案:

答案 0 :(得分:2)

你可以做两件事 1.将自定义对象存储在每次更改方向时未创建的位置,即应用程序类,服务等。 2.将该对象存储在您在OnSaveInstanceState()中作为参数获取的Bundle中,并使用该Bundle在OnRestoreInstanceState()或OnCreate()中设置Object ...

例如,

@Override
protected void onCreate(Bundle savedInstanceState) {
    Logger.d("Dash onCreate");
    super.onCreate(savedInstanceState);

    ...
    // create fragments to use
    if (savedInstanceState != null) {
       //get your Object
    }
    if (yourObject != null)
        //restore the View using yourObject
    ...
} 

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

现在在您的自定义类中,您必须实现Serializable或Parcelable以将其存储在Bundle中。序列化很简单,但是如果你实现了Parcellable,你就可以对它进行更多的控制。

与此主题相关的SO上的其他类似线程是

Similar Example

Another good example

您可以在Android文档中为Fragments获得类似的示例。