Привязка данных перестает работать при использовании переменной MutableLiveData внутри макета [Gradle to 3.5.1] - PullRequest
0 голосов
/ 09 октября 2019

Я использую DataBinding в моем проекте. Используйте Java, а не Kotlin, Android Studio версии 3.5.1 (последняя)

После обновления версии проекта gradle с 3.5.0 до 3.5.1 внутри класса BindingImpl появилась ошибка. Я выяснил, что проблема с MutableLiveData внутри одного из моих файлов макета

Попытка очистить проект и перезапустить Android Studio. Но единственное, что работает, - это установить обратно версию gradle на 3.5.0

Вот мой макет

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

        <import type="androidx.lifecycle.MutableLiveData" />

        <variable
            name="hintText"
            type="String" />

        <variable
            name="helperText"
            type="String" />

        <variable
            name="collection"
            type="Object" />

        <variable
            name="selection"
            type="MutableLiveData" /> // this one is breaks down in 3.5.1

        <variable
            name="enabled"
            type="Boolean" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:setupSpinnerHint="@{true}">

        <kz.jgroup.android.umag.base.view.customs.ResizableItemsSpinner
            android:id="@+id/spinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"
            android:adapterWith="@{collection}"
            android:background="@drawable/spinner_outlined_box"
            android:enabled="@{enabled == null ? true : enabled}"
            android:paddingStart="12dp"
            android:paddingTop="26dp"
            android:paddingEnd="32dp"
            android:paddingBottom="17dp"
            android:selectedItem="@={selection}"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:textSize="16sp"
            tools:listitem="@layout/item_spinner_inline" />

        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/hint"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:background="@color/white"
            android:paddingLeft="4dp"
            android:paddingRight="4dp"
            android:text="@{hintText}"
            android:textColor="@color/focusable_color"
            android:textSize="14sp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            tools:text="Подсказка" />


        <androidx.appcompat.widget.AppCompatTextView
            android:id="@+id/helper_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:layout_marginTop="5dp"
            android:emptyToGone="@{helperText}"
            android:textColor="@color/focusable_color"
            android:textSize="12sp"
            app:layout_constraintStart_toStartOf="@+id/hint"
            app:layout_constraintTop_toBottomOf="@+id/spinner"
            tools:text="Вспомогательное сообщение" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</layout>

А вот где я получаю ошибку и что DataBinding генерирует

С версией 3.5.1

        boolean enabledJavaLangObjectNull = false;
        ? selectionGetValue = null; //Illegal start of expression
        java.lang.Object collection = mCollection;
        boolean enabledJavaLangObjectNullBooleanTrueEnabled = false;
        java.lang.String helperText = mHelperText;
        androidx.lifecycle.MutableLiveData<?> selection = mSelection;
        java.lang.String hintText = mHintText;
        java.lang.Boolean enabled = mEnabled;

В версии 3.5.0 сгенерированный код выглядит так:

        boolean enabledJavaLangObjectNull = false;
        java.lang.Object selectionGetValue = null;
        java.lang.Object collection = mCollection;
        boolean enabledJavaLangObjectNullBooleanTrueEnabled = false;
        java.lang.String helperText = mHelperText;
        androidx.lifecycle.MutableLiveData selection = mSelection;
        java.lang.String hintText = mHintText;
        java.lang.Boolean enabled = mEnabled;

Я ожидал, что при обновлении со стабильного 3.5.0 до стабильного 3.5.1 всебудет хорошо, но, как вы видите, это не так ((

...