Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扩展Android Parcelable类_Android_Oop_Interface_Subclass_Parcelable - Fatal编程技术网

扩展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
管理
地址而不是将其子类化)之外,别无选择。我知道这两种方法都不是最佳做法。