Если у вашего класса есть атрибут Boolean и вам нужно реализовать Parcelable, то эта короткая статья именно для вас. Приступим!

💡 Советы: Если вам нужно что-то напомнить о том, как реализовать Parcelable, прочтите мою короткую серию статей 👍:



Демо-класс

Это класс, с которым мы будем работать, House. Он имеет логический атрибут isNearSchool. Не торопитесь, чтобы просмотреть код, и когда будете готовы, продолжайте читать 👌

Написание логических значений

Чтобы записать логическое значение в посылку, вы можете использовать этот синтаксис в методе writeToParcel:

parcel.writeInt(<variable> ? 1 : 0);

Здесь вы можете увидеть полный код:

@Override
public void writeToParcel(Parcel parcel, int i) {
    parcel.writeInt(isNearSchool ? 1 : 0);
}

Более пристальный взгляд 🔍

Давайте подробнее рассмотрим это выражение:

<variable> ? 1 : 0

Это означает, что если <variable> равно true, целое число будет 1, а если <variable> равно false, целое число будет 0.

(В этом случае мы заменяем <variable> на isNearSchool)

true → 1
false → 0

Чтение логических значений

Чтобы прочитать логическое значение из посылки, вы можете использовать этот синтаксис в конструкторе House, который принимает Parcel в качестве аргумента:

in.readInt() == 1

Здесь вы можете увидеть полный код:

protected House(Parcel in) {
    isNearSchool = in.readInt() == 1;
}

Более пристальный взгляд 🔍

Давайте подробнее рассмотрим это выражение:

in.readInt() == 1

Наша логика для записи логического значения в посылку была:

true → 1
false → 0

У нас было логическое значение, и мы преобразовали его в int.

Теперь, чтобы прочитать значение, нам нужно сохранить ту же логику, но в обратном порядке, потому что мы будем читать int и должны преобразовать его в соответствующее логическое значение:

1 → true
0 → false

Для этого мы можем проверить, равно ли прочитанное int 1, и это сохранит нашу логику нетронутой:

isNearSchool = in.readInt() == 1;

Если значение равно 1, логическое значение, присвоенное isNearSchool, будет true, иначе будетfalse. ✅ Именно то, что нам нужно.

1 → true
0 → false

👏 Надеюсь, вы нашли эту статью полезной. Спасибо, что помогаете другим найти эту статью 😃. Заранее большое спасибо!