我试图使一个数组列表Parcelable,以便传递给一个活动的自定义对象列表。我开始写一个myObjectList类,它扩展了ArrayList<myObject>并实现了Parcelable。
MyObject的一些属性是布尔型的,但是Parcel没有任何读写布尔型的方法。
最好的处理方法是什么?
我试图使一个数组列表Parcelable,以便传递给一个活动的自定义对象列表。我开始写一个myObjectList类,它扩展了ArrayList<myObject>并实现了Parcelable。
MyObject的一些属性是布尔型的,但是Parcel没有任何读写布尔型的方法。
最好的处理方法是什么?
当前回答
您还可以使用writeValue方法。在我看来,这是最直接的解决办法。
dst.writeValue( myBool );
然后,你可以很容易地检索它与一个简单的转换为布尔:
boolean myBool = (Boolean) source.readValue( null );
实际上,Android框架会把它作为一个整数来处理:
writeInt( (Boolean) v ? 1 : 0 );
其他回答
您还可以使用writeValue方法。在我看来,这是最直接的解决办法。
dst.writeValue( myBool );
然后,你可以很容易地检索它与一个简单的转换为布尔:
boolean myBool = (Boolean) source.readValue( null );
实际上,Android框架会把它作为一个整数来处理:
writeInt( (Boolean) v ? 1 : 0 );
对于API 29及以上,我们可以使用
writeToParcel:
dest writeBoolean (booleanFlag);
readFromParcel:
booleanFlag = in.readBoolean()
或者我们可以用
writeToParcel:
dest.writeByte((byte) (booleanFlag ?1: 0));
readFromParcel:
布尔标志 = in.readbyte() != 0;
我是这么做的……
writeToParcel:
dest.writeByte((byte) (myBoolean ? 1 : 0)); //if myBoolean == true, byte == 1
readFromParcel:
myBoolean = in.readByte() != 0; //myBoolean == true if byte != 0
我通常把它们放在一个数组中,调用writeBooleanArray和readBooleanArray
如果你需要打包一个布尔值,你可以这样做:
parcel.writeBooleanArray(new boolean[] {myBool});
从api 29开始,你现在可以在Parcel类中使用readBoolean()。 详见https://developer.android.com/reference/android/os/Parcel#readBoolean()