¿Cómo leer/escribir un valor booleano al implementar la interfaz Parcelable?

Resuelto grunk asked hace 54 años • 14 respuestas

Estoy intentando crear ArrayList Parcelableuna lista de objetos personalizados para pasar a una actividad. Empiezo a escribir una myObjectListclase que extiende ArrayList<myObject>e implementa Parcelable.

Algunos atributos de MyObjectson booleanpero Parcelno tienen ningún método read/writeBoolean.

¿Cuál es la mejor manera de manejar esto?

grunk avatar Jan 01 '70 08:01 grunk
Aceptado

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
b_yng avatar Aug 17 '2011 08:08 b_yng

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 );
Taig avatar Dec 16 '2012 12:12 Taig

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.

Shaista Naaz avatar Jul 16 '2013 06:07 Shaista Naaz

Normalmente los tengo en una matriz y los llamo writeBooleanArrayyreadBooleanArray

Si lo que necesita empaquetar es un único valor booleano, puede hacer esto:

parcel.writeBooleanArray(new boolean[] {myBool});
Geobits avatar Jun 01 '2011 12:06 Geobits
out.writeInt(mBool ? 1 : 0); //Write
this.mBool =in.readInt()==1; //Read
Meghna avatar Jun 10 '2014 08:06 Meghna