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
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
}
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.
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
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
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
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'
}
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 ...
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
}
}
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.
build.gradle
.Android {
dataBinding {
enabled = true
}
}
Il fera tout pour vous automatiquement.
Supprimer databinding.compiler
kapt 'com.Android.databinding:compiler:3.0.1'
Supprimer kapt
kapt {
generateStubs = true
}
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
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.
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;
}
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.
ce travail pour moi dans android Studio ver 3.1.3
apply plugin: 'kotlin-kapt'
dataBinding {
enabled = true
}
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.