使用Parceler保存Android Activity或Fragment状态

时间:2016-08-10 13:13:16

标签: android android-fragments android-activity android-savedstate parceler

我正在使用parceler库。我用这个做了一个复杂的对象。正如它所说的那样,它使对象可以分配,所以我想用它来保存片段状态。

这是我的模特

@Parcel
public class Example {
    String name;
    int age;

    public Example() {}

    public Example(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public String getName() { return name; }

    public int getAge() { return age; }
}

在我的片段中,我有这个

   ArrayList<Example> exampletLists;

但是当我尝试将其放入onSaveInstanceState

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList("EXAMPLE_LIST",exampletLists); //this is what I want to do , but I can't 
}

我希望获得onCreate Like

中的值
 if (savedInstanceState != null) {
    exampletLists = savedInstanceState.getParcelableArrayList(EXAMPLE_LIST);
 }

如何使用此libray实现此目的?

1 个答案:

答案 0 :(得分:1)

Parceler可以包装ArrayLists,所以你可以做的是在编写和读取`savedInstanceState时使用Parcels.wrap()Parcels.unwrap()方法:

public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelable("EXAMPLE_LIST", Parcels.wrap(exampletLists));
}

public void onCreate(Bundle savedInstanceState) {
    //...
    if (savedInstanceState != null) {
        exampletLists = Parcels.unwrap(savedInstanceState.getParcelable(EXAMPLE_LIST));
    }
}