Подтвердить что ты не робот

Выражение привязки данных не компилируется

Я тестирую новую библиотеку привязки данных. У меня есть странная проблема, когда привязка свойства visibility не компилируется.

Это упрощенная версия xml файла:

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

    <data>

    <variable
        name="header"
        type="com.example.EmailHeader" />
    </data>

    <RelativeLayout ... >

        <TextView
            ...
            android:text="@{header.senderName ?? header.senderAddress}"
            android:visibility="@{header.hasAttachment ? View.VISIBLE : View.INVISIBLE}" />

    </RelativeLayout>
</layout>

Я получаю следующее сообщение при компиляции:

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.

java.lang.RuntimeException: обнаружены ошибки привязки данных.   ****/ошибка привязки данных **** msg: Идентификаторы должны иметь определенные пользователем типы из файла XML. Просмотр отсутствует.

Все компилируется (и работает!), когда я удаляю объявление android:visiblity.

Я не вижу, что мне здесь не хватает.

4b9b3361

Ответ 1

Внутри тега данных вы также должны добавить:

<import type="android.view.View" />

Ответ 2

Проблема сохранялась, несмотря на добавление <import type="android.view.View" /> к тегу данных. Наконец, обнаружена ошибка, вызванная несоответствием имени моей переменной и объекта моего класса POJO.

Это был мой тег данных:

<data>
        <import type="android.view.View" />
        <variable
            name="employee"
            type="com.example.Employee"/>
    </data>

и я использовал:

<TextView
        ...
        android:text="@{user.lastName}" />

вместо:

<TextView
        ...
        android:text="@{employee.lastName}" />

Забыл изменить его после копирования кода из документации. Следите за такими ошибками, которые трудно обнаружить для новичков в DataBinding

Ответ 3

Я столкнулся с той же ошибкой, которая была вызвана тем, что объект POJO был в проекте библиотеки.

Просто запустите build.gradle библиотеки, чтобы включить привязку данных, а также в основной проект:

dataBinding {
    enabled = true
}