扩展Android Parcelable类
我有一个扩展Android Parcelable类,android,oop,interface,subclass,parcelable,Android,Oop,Interface,Subclass,Parcelable,我有一个CustomAddress类,它扩展了实现Parcelable的android.location.Address类 我试图将我的CustomAddress实现为Parcelable,但在从包裹创建类时遇到了问题。从包裹创建CustomAddress时,我要做的是首先填写超级类Address中的所有字段,然后填写我自己的字段。因此,我实现了CREATOR字段: public static final Parcelable.Creator<CustomAddress> CREAT
CustomAddress
类,它扩展了实现Parcelable
的android.location.Address
类
我试图将我的CustomAddress
实现为Parcelable
,但在从包裹创建类时遇到了问题。从包裹创建CustomAddress
时,我要做的是首先填写超级类Address
中的所有字段,然后填写我自己的字段。因此,我实现了CREATOR
字段:
public static final Parcelable.Creator<CustomAddress> CREATOR
= new Parcelable.Creator<CustomAddress>() {
public CustomAddress createFromParcel(Parcel in) {
return new CustomAddress(in);
}
public CustomAddress[] newArray(int size) {
return new CustomAddress[size];
}
};
公共静态最终包裹。创建者
=新的Parcelable.Creator(){
公共CustomAddress createFromParcel(包裹中){
返回新的客户地址(在中);
}
公共自定义地址[]新数组(整数大小){
返回新的CustomAddress[大小];
}
};
但是在我的CustomAddress(packetin)
creator中,我不能调用super(in)
,因为它在android.location.Address中不存在。我只能访问android.location.Address.CREATOR
。那么如何使用CREATOR
填写字段呢
编辑:链接到安卓地址
类这里有一个类似的问题和马克·墨菲的精彩答案:
因此,在您的情况下,您可以使CustomAddress
扩展Address
(就像您已经做的那样),调用构造函数中的super()
方法,然后从传递的包中读取您自己的属性。在writeToParcel()
方法中也必须执行相同的操作(以相同的顺序),当然这里要将您的属性添加到包裹中。谢谢,我检查了这个答案,但我认为我的情况不同。如果我只调用super(),super类现在如何处理包裹?我希望所有的超类字段也被填充。很抱歉,现在我了解到Address
类是不同的,因为它不从构造函数参数中提取包裹,而是使用创建者。在这种情况下,除了从Address.CREATOR
s改编代码或使用组合而不是继承(即,让您的CustomAddress
管理地址而不是将其子类化)之外,别无选择。我知道这两种方法都不是最佳做法。