417 Stimmen

Wie kann man einen Booleschen Wert lesen/schreiben, wenn man die Schnittstelle Parcelable implementiert?

Ich versuche, eine ArrayList Parcelable um einer Aktivität eine Liste von benutzerdefinierten Objekten zu übergeben. Ich beginne mit dem Schreiben einer myObjectList Klasse, die die ArrayList<myObject> und umsetzen Parcelable .

Einige Eigenschaften von MyObject sind boolean sondern Parcel haben keine Methode read/writeBoolean .

Wie kann man das am besten handhaben?

962voto

b_yng Punkte 14056

Ich würde es folgendermaßen machen...

writeToParcel:

dest.writeByte((byte) (myBoolean ? 1 : 0));     //if myBoolean == true, byte == 1

AusParzelleLesen:

myBoolean = in.readByte() != 0;     //myBoolean == true if byte != 0

70voto

Taig Punkte 6302

Sie können auch die writeValue Methode. Meiner Meinung nach ist das die einfachste Lösung.

dst.writeValue( myBool );

Danach können Sie es mit einem einfachen Wurf nach Boolean :

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

Unter der Haube wird das Android Framework es als Integer behandeln:

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

22voto

Shaista Naaz Punkte 8101

Deklarieren Sie wie folgt

 private boolean isSelectionRight;

schreiben.

 out.writeInt(isSelectionRight ? 1 : 0);

lesen

isSelectionRight  = in.readInt() != 0;

Der Typ boolean muss in etwas umgewandelt werden, das Parcel unterstützt, und so können wir ihn in int umwandeln.

16voto

Henk-Martijn Punkte 1964

AndroidStudio (mit 2.3 atm) können Sie nach der Implementierung von Parcelable in Ihrer Klasse einfach den Mauszeiger über Ihre Klassenname und fordert Sie auf, die paketfähige Implementierung hinzuzufügen:

enter image description here

Aus den vier Feldern werden die folgenden Informationen generiert:

public class YourClass implements Parcelable{

String someString;
int someInt;
boolean someBoolean;
List<String> someList;

protected YourClass(Parcel in) {
    someString = in.readString();
    someInt = in.readInt();
    someBoolean = in.readByte() != 0;
    someList = in.createStringArrayList();
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(someString);
    dest.writeInt(someInt);
    dest.writeByte((byte) (someBoolean ? 1 : 0));
    dest.writeStringList(someList);
}

...

8voto

Geobits Punkte 21713

Ich habe sie normalerweise in einem Array und rufe writeBooleanArray y readBooleanArray

Wenn Sie nur einen einzigen Booleschen Wert verpacken müssen, können Sie so vorgehen:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X