我有一个实现Parcelable的类,但它只有基元类型作为成员。
到目前为止,我在两个活动之间毫无问题地传递了这个类的一个实例作为Parcelable。
但是我要添加一个类型为句点的成员(java.time)。
在internet上进行研究时,我发现传递一个实现parcelable的类的成员对象(非parcelable),我实际上应该传递这个对象的字段(基元类型或字符串)通过parcelable,而不是传递整个对象(因为它没有实现parcelable)
查看文档,Period类没有实现Parcelable。
那么,这是通过包裹的正确方式吗?
Period objPeriod;
public void writeToParcel(Parcel out, int flags){
out.writeString(objPeriod.toString());
}
private MyClass(Parcel in){
objParcel.parse(in.readString());
}
perioD
实现了serializable
,因此您可以这样编写它。
public void writeToParcel(Parcel out, int flags) {
out.writeSerializable(objPeriod);
}
private MyClass(Parcel in) {
objPeriod = (Period) in.readSerializable();
}
但是,如果可能的话,最好避免serializable
。 鉴于perioD
的Javadoc确实专门定义了一个结构化的toString()
实现,然后可以解析回:
将此周期输出为字符串,如P6Y3M1D。
那么我认为您最初的建议应该完全可以接受,使用静态的period.parse()
方法:
从文本字符串(如pnynmnd)中获取句点。
这将解析toString()生成的字符串,该字符串基于ISO-8601句点格式PnYnMnD和PNW。
public void writeToParcel(Parcel out, int flags) {
out.writeString(objPeriod.toString());
}
private MyClass(Parcel in) {
objPeriod = Period.parse(in.readString());
}