web-dev-qa-db-fra.com

Kotlin-Android: liaison de données de référence non résolue

J'ai la classe de fragment suivante écrite en Java en utilisant la nouvelle bibliothèque de liaison de données

import com.example.app.databinding.FragmentDataBdinding;

public class DataFragment extends Fragment {

    @Nullable
    private FragmentDataBinding mBinding;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false);
        return mBinding.getRoot();
    }
}

Il compile et fonctionne bien.
J'ai essayé de le réécrire à Kotlin et je suis arrivé avec ce qui suit:

import com.example.app.databinding.FragmentDataBdinding

class ProfileFragment : Fragment() {

    private var mBinding: FragmentDataBinding? = null

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_data, container, false)
        return mBinding!!.getRoot()
    }
}

Mais maintenant, l'étape :app:compileDebugKotlin génère les éléments suivants:

Erreur: (16, 38) Référence non résolue: liaison de données
Erreur: (37, 27) Référence non résolue: FragmentDataBinding

Comment utiliser la bibliothèque de liaison de données Android avec Kotlin?

Mon build.gradle de niveau supérieur:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.Android.tools.build:gradle:1.3.0'
        classpath 'com.Android.databinding:dataBinder:1.0-rc4'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Mon build.gradle dans le répertoire de l'application (uniquement les parties pertinentes):

apply plugin: 'com.Android.application'
apply plugin: 'com.Android.databinding'
apply plugin: 'kotlin-Android'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

buildscript {
    ext.kotlin_version = '0.14.451'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-Android-extensions:$kotlin_version"
    }
}
repositories {
    mavenCentral()
    maven {
        url 'http://oss.sonatype.org/content/repositories/snapshots'
    }
}

J'utilise Android Studio 1.4, Outils de version 23.0.1, SDK Android 23, Outils de SDK 24.4.0

114
Mikhail

Essayez d'utiliser cette configuration:

Dans main build.gradle :

buildscript {
    ext.kotlin_version = '<kotlin-version>'
    ext.Android_plugin_version = '2.2.0-alpha4'
    dependencies {
        classpath "com.Android.tools.build:gradle:$Android_plugin_version"
    //... rest of the content
    }
}

App build.gradle :

Android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.Android.databinding:compiler:$Android_plugin_version"
}

kapt {
    generateStubs = true
}
80
lrampazzo

J'ai trouvé une nouvelle solution, j'espère que cela vous aidera.

Tout d'abord, vérifiez si le plugin est appliqué: 

apply plugin: 'kotlin-kapt'

puis 

Android {
    ...
    ...
    dataBinding {
        enabled = true
    }
    ...
    ...
}

Vous pourriez avoir une erreur dans la dépendance:

UTILISATION

kapt 'com.Android.databinding:compiler:3.0.1'

au lieu de

compile 'com.Android.databinding:compiler:3.0.1'

Je vous remercie.

56
Pratik Butani

Mise à jour 2: C'est une réponse très ancienne, reportez-vous à la réponse de lrampazzo.

Cela fonctionne avec 1.0-rc4, mis

kapt 'com.Android.databinding:compiler:1.0-rc4' 

dans vos dépendances

Merci Ghedeon, pour le lien dans les commentaires

Update: Voici un exemple de projet hello world vraiment simple

11
Jaydeep

La version du compilateur Data Binding est identique à la version gradle de votre fichier build.gradle:

// at the top of file 
apply plugin: 'kotlin-kapt'


Android {
  dataBinding.enabled = true
}

dependencies {
  kapt "com.Android.databinding:compiler:3.0.0-beta1"
}

et la version gradle est

classpath 'com.Android.tools.build:gradle:3.0.0-beta1'

Voici un exemple de lien pour terminer l’utilisation de la bibliothèque de liaison de données dans kotlin.

https://proandroiddev.com/modern-Android-development-with-kotlin-september-2017-part-1-f976483f7bd6

10
Sijansd

Pour résoudre le problème, vous devez mettre 

apply plugin: 'kotlin-kapt'

en haut de build.gradle (Module: app), puis mettez cette ligne dans les dépendances

kapt "com.Android.databinding:compiler:[YOUR_Android_PLUGIN_VERSION]"

Vous pouvez trouver la version du plugin Android en allant au menu 

File > Project Structure > Project

Puis Sync Again Again. Si vous voyez cet avertissement, ignorez-le.

Des plug-ins Gradle tiers peuvent en être la cause

6
Sowattana Sigen

Essayez ceci.Andrid studio 2.0 (2.1)

Dans build.gradle

Android{
   dataBinding {
        enabled = true
    }
...
}
dependencies {
 kapt 'com.Android.databinding:compiler:2.0.0-rc1'
....
}

kapt {
    generateStubs = true
}

Dans mon projet: buildToolsVersion = "23.0.3"

dans le niveau supérieur build.gradle

dependencies {
        classpath 'com.Android.tools.build:gradle:2.0.0'
    }
5
Garf1eld

Liaison de données de configuration en kotlin

build.gradle (application de dossier)

apply plugin: 'kotlin-kapt'

Android {
   ...
   dataBinding {
      enabled = true
   }
}

dependencies {
   // data binding
   kapt "com.Android.databinding:compiler:3.1.3"
}

Profitez de Kotlin ...

4

Ajouter la suite dans votre app build.gradle

kapt "com.Android.databinding:compiler:$Android_plugin_version"
apply plugin: 'kotlin-kapt' // This one at top where plugin belong to

Ça fera l'affaire.

$Android_plugin_version est la version de com.Android.tools.build:gradle dans application build.gradle

Ajoutez aussi ceci à votre module build.gradle

Android { /// Existing Code kapt { generateStubs = true } }

2
d4h

Mise à jour importante

Vous pouvez voir dans la documentation d'Android.

Le nouveau compilateur de la version 3.2 est activé par défaut.

Donc Il suffit de mettre à jour votre Android Studio vers la V3.2 ou plus récent . et supprimez toutes les configurations inutiles.

Donc, activez simplement dataBinding dans le niveau d'application build.gradle.

Android {
    dataBinding {
        enabled = true
    }
}

Il fera tout pour vous automatiquement.

Vous pouvez supprimer en toute sécurité ci-dessous lignes-

  • Supprimer databinding.compiler

    kapt 'com.Android.databinding:compiler:3.0.1'
    
  • Supprimer kapt

    kapt {
        generateStubs = true
    }
    

Ma config complète

build.gradle (Projet) 

kotlin_version = '1.2.71'    
classpath 'com.Android.tools.build:gradle:3.2.0'

Utilisez gradle dernière version . Utilisez kotlin dernière version .

build.gradle (App)

apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'

compileSdkVersion 28
targetSdkVersion 28

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

Important Ne vous contentez pas de copier et coller la configuration. Voir cette réponse pour configurer la version Kotlin.

gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.Zip
1
Khemraj

Dans mon cas, ajouter

kapt {
    generateStubs = true
}

Résolu le problème pour moi. Je l'ai ignoré la première fois, j'ai pensé que cela n'avait aucune incidence sur le problème:

Liaison de données de référence non résolue

Mais maintenant, la liaison de données fonctionne très bien.

0
Mahmoud

Ajoutez des liaisons de données dans Android Project lorsque vous utilisez le langage kotlin.

Sous les étapes

--Vous devez d'abord ajouter le plugin ci-dessous

**apply plugin: 'kotlin-kapt'**

--Second dataBinding activé vrai

**dataBinding {
        enabled = true
    }**

Tout ce point ajouté dans app.build.gradle Après avoir cliqué sur "SYNC NOW"

Par exemple, vous avez une activité d'édition de profil, puis comment définir une variable de liaison dans kotlin?

lateinit var buildProfileBinding: ActivityBuildProfileBinding

buildProfileBinding = getBinding()

Ici, get binding est une méthode pour gérer le type d'objet de liaison. 

protected <T extends ViewDataBinding> T getBinding() {
                return (T) binding;
            }
0
Shripal Shah

Dans mon cas, l'erreur était Unresolved reference: RegisterationUserBinding Je venais d'utiliser mon nom de présentation fragment_registeration_user comme ceci FragmentRegisterationUserBinding et je l'ai insérée dans la présentation Liaison de données. L'erreur a disparu.

0
EL TEGANI MOHAMED

ce travail pour moi dans android Studio ver 3.1.3

apply plugin: 'kotlin-kapt'

dataBinding {
    enabled = true
}

montre un exemple d'utilisation

0
emad pirayesh

Je veux partager ma propre expérience. Pour utiliser la liaison de données avec Kotlin dans Android studio, il suffit d'ajouter

dataBinding {
    enabled = true
}

Après cela, "synchronisez-le" et, il est très important, de "créer un projet". Après cela, tout votre objet sera actif à utiliser.

0
gloomyad