为什么Parcel.writeBoolean(boolean)不存在?

时间:2016-08-10 06:43:29

标签: android parcel

当我需要将boolean写入Parcel时,我会这样做:

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(myBoolean ? 1 : 0);
}

但是,有没有理由让writeBoolean方法不存在?

1 个答案:

答案 0 :(得分:0)

您可以使用屏蔽和移位将布尔值打包到一个字节中。这将是最有效的方式,也许是他们期望你做的事情。

检查此链接https://developer.android.com/reference/android/os/Parcel.html

的“基本体”部分

包裹您的布尔值..您可以使用http://www.parcelabler.com/

例如:

class BooleanSample {
    Boolean flag;
}

结果:

class BooleanSample implements Parcelable {
    Boolean flag;

    protected BooleanSample(Parcel in) {
        byte flagVal = in.readByte();
        flag = flagVal == 0x02 ? null : flagVal != 0x00;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        if (flag == null) {
            dest.writeByte((byte) (0x02));
        } else {
            dest.writeByte((byte) (flag ? 0x01 : 0x00));
        }
    }

    @SuppressWarnings("unused")
    public static final Parcelable.Creator<BooleanSample> CREATOR = new Parcelable.Creator<BooleanSample>() {
        @Override
        public BooleanSample createFromParcel(Parcel in) {
            return new BooleanSample(in);
        }

        @Override
        public BooleanSample[] newArray(int size) {
            return new BooleanSample[size];
        }
    };
}