我有一个CustomAddress
类,它扩展了android.location.Address
类,该类实现Parcelable
。扩展Android可分类类
我想让我的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];
}
};
但在我CustomAddress(Parcel in)
创作者,我不能叫super(in)
,因为它不存在android.location.Address
。我只能访问android.location.Address.CREATOR
。那么如何使用CREATOR
填写我的领域?
编辑:链接到Android Address
类https://developer.android.com/reference/android/location/Address.html
谢谢我检查了这个答案,但我认为我的情况是不同的。如果我只是打电话给super(),现在关于包裹的超类怎么样?我希望所有的超类字段都被填充。 – chopchop 2013-04-05 01:47:20
对不起,现在我明白了'Address'类是不同的,因为它不会从构造函数参数中获取它的包,而是使用创建者。在这种情况下,除了调整'Address.CREATOR'' ['createFromParcel()']'的代码外(https://github.com/android/platform_frameworks_base/blob/master/location/java/android/) location/Address.java#L477)或者使用组合而不是继承(即让你的'CustomAddress'管理一个'Address'而不是继承它的子类)。我知道这两种方法都不是最佳实践。 – saschoar 2013-04-05 10:49:38
嗯好吧,这是相当恼人的行为... – chopchop 2013-04-07 23:21:09