web-dev-qa-db-fra.com

Expression de liaison de données non compilée

J'essaie la nouvelle bibliothèque de liaison de données. J'ai un problème étrange où lier la propriété visibility ne compile pas.

Ceci est une version simplifiée du fichier 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>

Je reçois le message suivant lors de la compilation:

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

Java.lang.RuntimeException: erreurs de liaison de données détectées. ****/data binding error **** msg: les identificateurs doivent avoir des types définis par l'utilisateur à partir du fichier XML. Il manque la vue

Tout est compilé (et fonctionne!) Lorsque je supprime le Android:visiblity déclaration.

Je ne vois pas ce qui me manque ici

63
Jordy Langen

À l'intérieur de la balise de données, vous devez également ajouter:

<import type="Android.view.View" />
167
bwhite

Problème persistant malgré l'ajout de <import type="Android.view.View" /> à ma balise de données.Enfin, l'erreur a été provoquée par une incompatibilité de nom de variable et d'objet de ma classe POJO.

C'était ma balise de données:

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

et j'utilisais:

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

au lieu de:

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

J'ai oublié de le changer après avoir copié le code de la documentation. Recherchez les erreurs comme celle-ci qui sont difficiles à détecter pour les débutants dans DataBinding

31
ojonugwa ochalifu

J'ai été confronté exactement à la même erreur, due au fait que l'objet POJO se trouvait dans un projet de bibliothèque.

Il suffit de mettre à jour le build.gradle de la bibliothèque pour activer la liaison de données ainsi que dans le projet principal:

dataBinding {
    enabled = true
}
7
Benoit