我试图使一个数组列表Parcelable,以便传递给一个活动的自定义对象列表。我开始写一个myObjectList类,它扩展了ArrayList<myObject>并实现了Parcelable。

MyObject的一些属性是布尔型的,但是Parcel没有任何读写布尔型的方法。

最好的处理方法是什么?


当前回答

我通常把它们放在一个数组中,调用writeBooleanArray和readBooleanArray

如果你需要打包一个布尔值,你可以这样做:

parcel.writeBooleanArray(new boolean[] {myBool});

其他回答

out.writeInt(mBool ? 1 : 0); //Write
this.mBool =in.readInt()==1; //Read

这个问题已经被其他人完美地回答了,如果你想自己做的话。

如果您更喜欢封装或隐藏大部分低级的打包代码,那么您可以考虑使用我在不久前编写的一些代码来简化对parcelables的处理。

给包裹写信很简单:

parcelValues(dest, name, maxSpeed, weight, wheels, color, isDriving);

例如,其中color是enum, isDriving是boolean。

从包裹中阅读也不难:

color = (CarColor)unparcelValue(CarColor.class.getClassLoader());
isDriving = (Boolean)unparcelValue();

看看我添加到项目中的“parceldroideexample”。

最后,它还使CREATOR初始化项保持简短:

public static final Parcelable.Creator<Car> CREATOR =
    Parceldroid.getCreatorForClass(Car.class);

从api 29开始,你现在可以在Parcel类中使用readBoolean()。 详见https://developer.android.com/reference/android/os/Parcel#readBoolean()

我通常把它们放在一个数组中,调用writeBooleanArray和readBooleanArray

如果你需要打包一个布尔值,你可以这样做:

parcel.writeBooleanArray(new boolean[] {myBool});

这里很难找出真正的问题。我猜是在实现Parcelable接口时如何处理布尔值。

MyObject的一些属性是布尔型的,但是Parcel没有任何读写布尔型的方法。

您必须将值存储为字符串或字节。如果你想要一个字符串,那么你必须使用string类的静态方法valueOf()来解析布尔值。它不像保存在字节坚韧中那样有效。

String.valueOf(theBoolean);

如果你想要一个字节,你必须自己实现一个转换逻辑。

byte convBool = -1;
if (theBoolean) {
    convBool = 1;
} else {
    convBool = 0;
}

在解编组Parcel对象时,必须注意到原始类型的转换。