¿Cómo leer/escribir un valor booleano al implementar la interfaz Parcelable?
Estoy intentando crear ArrayList
Parcelable
una lista de objetos personalizados para pasar a una actividad. Empiezo a escribir una myObjectList
clase que extiende ArrayList<myObject>
e implementa Parcelable
.
Algunos atributos de MyObject
son boolean
pero Parcel
no tienen ningún método read/writeBoolean
.
¿Cuál es la mejor manera de manejar esto?
Así es como lo haría...
escribir al paquete:
dest.writeByte((byte) (myBoolean ? 1 : 0)); //if myBoolean == true, byte == 1
leer desde el paquete:
myBoolean = in.readByte() != 0; //myBoolean == true if byte != 0
También puedes utilizar el método writeValue . En mi opinión, esa es la solución más sencilla.
dst.writeValue( myBool );
Luego podrás recuperarlo fácilmente con una simple conversión a Boolean
:
boolean myBool = (Boolean) source.readValue( null );
Debajo del capó, Android Framework lo manejará como un número entero:
writeInt( (Boolean) v ? 1 : 0 );
declaras así
private boolean isSelectionRight;
escribir
out.writeInt(isSelectionRight ? 1 : 0);
leer
isSelectionRight = in.readInt() != 0;
El tipo booleano debe convertirse a algo que admita Parcel y, por lo tanto, podamos convertirlo a int.
Normalmente los tengo en una matriz y los llamo writeBooleanArray
yreadBooleanArray
Si lo que necesita empaquetar es un único valor booleano, puede hacer esto:
parcel.writeBooleanArray(new boolean[] {myBool});
out.writeInt(mBool ? 1 : 0); //Write
this.mBool =in.readInt()==1; //Read