如何使用Parcelable传递一个带有2D ArrayList字段的自定义对象

3

在我的Java类Exercise中,我有一个二维ArrayList。我已经通过Parcelable将Activity中的所有字段传递到另一个对象中了。然而,我不知道该如何使用Parcelable传递对象内部的二维ArrayList。

public class Exercise implements Parcelable{
    private String name, equipmentRequired;
    private ArrayList musclesWorked;
    private HashMap personalBest;
    private boolean selected;
    private float minAccelLevel, minAccelChanges;
    private ArrayList<ArrayList<Double>> sets = new ArrayList<>();

    ...

    private Exercise(Parcel in) {
        name = in.readString();
        equipmentRequired = in.readString();
        musclesWorked = in.readArrayList(ArrayList.class.getClassLoader());
        personalBest = in.readHashMap(HashMap.class.getClassLoader());
        selected = in.readInt() != 0;
        // sets = ???????
    }

    public static final Parcelable.Creator<Exercise> CREATOR = newParcelable.Creator<Exercise>() {
        public Exercise createFromParcel(Parcel in) {
            return new Exercise(in);
        }

        public Exercise[] newArray(int size) {
            return new Exercise[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(equipmentRequired);
        dest.writeList(musclesWorked);
        dest.writeMap(personalBest);
        dest.writeInt(selected ? 1 : 0);
        // ?????
    }

}
2个回答

1
根据谷歌文档其他问题,我建议选择。
private Exercise(Parcel in) {
        name = in.readString();
        equipmentRequired = in.readString();
        musclesWorked = in.readArrayList(ArrayList.class.getClassLoader());
        personalBest = in.readHashMap(HashMap.class.getClassLoader());
        selected = in.readInt() != 0;
        sets = in.readArrayList(null);
}

这是因为,正如文档所述:
给定的类加载器将用于加载任何封装的Parcelable。

1

我自己解决了这个问题。谢谢。

...

    private Exercise(Parcel in) {
        ...
        sets = in.readArrayList(ArrayList.class.getClassLoader());
    }



    @Override
    public void writeToParcel(Parcel dest, int flags) {
        ...
        dest.writeList(sets);

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接