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

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

最好的处理方法是什么?


当前回答

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

其他回答

如果你使用Android Studio,我建议你使用最简单的方法来实现Parcelable。

简单地去文件->设置->插件->浏览存储库和搜索parcelable .见图片

它会自动创建Parcelable。

有一个网友也在做这件事。http://www.parcelabler.com/

您可以使用屏蔽和移位将布尔值打包到一个字节中。这是最有效的方法,也可能是他们希望你做的。

你这样声明

 private boolean isSelectionRight;

 out.writeInt(isSelectionRight ? 1 : 0);

read

isSelectionRight  = in.readInt() != 0;

布尔类型需要转换为Parcel支持的东西,所以我们可以将它转换为int。

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

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

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

String.valueOf(theBoolean);

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

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

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

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

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

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