我有一个类似ObjectA的类,它实现了Parcelable。
total
ObjectB来自添加到项目的.jar文件,我无法为该类实现Parcelable接口。
public class ObjectA implements Parcelable {
private ObjectB objB;
private int mId;
}
所以我想知道是否有任何解决方案可以从包中读取或写入包裹用于ObjectB?
当然private ObjectA(Parcel in) {
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
和dest.writeParcelable
无效,因为ObjectB无法实现Parcelable接口。
答案 0 :(得分:0)
应该可以通过使用ObjectB的处理对象:
public class ObjectBHandler implements Parcelable {
private ObjectB b;
public ObjectBHandler(ObjectB b) {
this.b = b;
}
public ObjectB getB() {
return b;
}
public void setB(ObjectB b) {
this.b = b;
}
/**
* Describe the kinds of special objects contained in this Parcelable's
* marshalled representation.
*
* @return a bitmask indicating the set of special object types marshalled
* by the Parcelable.
*/
@Override
public int describeContents() {
return 0;
}
/**
* Flatten this object in to a Parcel.
*
* @param dest The Parcel in which the object should be written.
* @param flags Additional flags about how the object should be written.
* May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}.
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeDouble(b.getValue());
//...
}
}
答案 1 :(得分:0)
如果你的意思是你不能实现接口,因为它在jar中,那么可能有一个解决方案: 如果您对ObjectB的实现了解得足够好,并且您知道应该恢复的每个字段,并且如果ObjectB不是最终的,我猜您仍然可以这样做:
public class ParcelableObjectB extends ObjectB implements Parcelable {...}
答案 2 :(得分:0)
您可以通过getter从ObjectB
获取属性并将其写入Parcel
,当您从Parcel
读取时 - 您可以创建新的ObjectB
并通过setter进行设置。如果您没有访问权限和任何setter / getter,您可以使用反射。