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

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

最好的处理方法是什么?


当前回答

您还可以使用writeValue方法。在我看来,这是最直接的解决办法。

dst.writeValue( myBool );

然后,你可以很容易地检索它与一个简单的转换为布尔:

boolean myBool = (Boolean) source.readValue( null );

实际上,Android框架会把它作为一个整数来处理:

writeInt( (Boolean) v ? 1 : 0 );

其他回答

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

在Android (AOSP)源码中有很多这样的例子。例如,PackageInfo类有一个布尔成员requiredForAllUsers,它被序列化如下:

public void writeToParcel(Parcel dest, int parcelableFlags) {
    ...
    dest.writeInt(requiredForAllUsers ? 1 : 0);
    ...
}

private PackageInfo(Parcel source) {
    ...
    requiredForAllUsers = source.readInt() != 0;
    ...
}
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。