Comment puis-je résoudre ce problème. Je ne peux pas faire fonctionner cette liaison de données, j'ai tout essayé. Build.gradle (module d'application)
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt'
Android {
compileSdkVersion 27
defaultConfig {
applicationId "com.fusion.alen.ask"
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
androidExtensions {
experimental = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
}
dependencies {
implementation 'com.Android.support:multidex:1.0.3'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.Android.support:appcompat-v7:27.1.1'
implementation 'com.Android.support:animated-vector-drawable:27.1.1'
implementation 'com.Android.support:support-vector-drawable:27.1.1'
implementation 'com.Android.support:customtabs:27.1.1'
implementation 'com.Android.support:cardview-v7:27.1.1'
implementation 'com.Android.support:design:27.1.1'
implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
implementation 'com.Android.support:recyclerview-v7:27.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-Android-extensions'
repositories {
mavenCentral()
}
J'ai essayé d'ajouter kapt "com.Android.databinding: compiler: $ compiler_version" mais cela me donne une erreur. Build.gradle (projet de module)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext{
kotlin_version = '1.2.71'
compiler_version = '3.2.1'
}
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.Android.tools.build:gradle:3.2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
Ceci est mon profile_fragment.xml, j'ai suivi les instructions de documentation
<layout xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<data>
<variable
name="user"
type="com.alen.ask.UserModel.User" />
</data>
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:layout_editor_absoluteY="25dp">
<LinearLayout
Android:id="@+id/profile_box"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:background="@color/primaryColor"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/app_bar">
<LinearLayout
Android:id="@+id/qff_box"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_weight="5"
Android:orientation="horizontal"
Android:baselineAligned="false">
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:orientation="vertical">
<TextView
Android:id="@+id/questions_number"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:textSize="18sp"
Android:textStyle="bold"
**Android:text="@{user.questionsNum}"************
tools:text="0" />
</LinearLayout>
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:orientation="vertical">
<TextView
Android:id="@+id/followers_number"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:textSize="18sp"
Android:textStyle="bold"
**Android:text="@{user.followersNum}"************
tools:text="0" />
</LinearLayout>
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:orientation="vertical">
<TextView
Android:id="@+id/following_number"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:gravity="center"
Android:textSize="18sp"
Android:textStyle="bold"
**Android:text="@{user.followingNum}"***********
tools:text="0" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
Android:id="@+id/app_bar"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:background="@color/primaryDarkColor"
Android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
Android:id="@+id/username_text"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginLeft="8dp"
Android:layout_weight="1"
**Android:text="@{user.name}"**
Android:textColor="@color/primaryTextColor"
Android:textSize="18sp"
Android:layout_marginStart="8dp" />
</LinearLayout>
</Android.support.constraint.ConstraintLayout>
</layout>
Ma classe de données utilisateur:
data class User(val name: String,
val email: String,
val uid: String,
val photo: String,
val postsList: ArrayList<String> = ArrayList(),
val questionsNum: Int = 0,
val followersNum: Int = 0,
val followingNum: Int = 0
)
C'est à l'intérieur de la classe ProfileFragmen, dans la méthode onCreateView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding = ProfileFragmentBinding.inflate(inflater, container, false)
binding.user = user
}
Cette ligne binding.user = user me donne une erreur: Impossible d'accéder à la classe 'UserModel.User'. Vérifiez le chemin de classe de votre module pour les dépendances manquantes ou conflictuelles Comment puis-je résoudre ce problème, j'ai suivi les instructions de la documentation DataBinding et Je ne pense pas avoir commis d'erreur. J'ai essayé de nettoyer et de reconstruire le projet, mais cela n'a pas fonctionné. J'ai essayé d'ajouter ces dépendances 'kapt', ça n'a pas fonctionné ... Fichier-> ProjectStructure-> Version Gradle: 4.10.1, AndroidPluginVersion: 3.2.1, KotlinLanguageVersion: 1.2, KotlinPluginVersion: 1.2.71-release-Studio3 .2-1
Je vous remercie.
Renommez votre dossier UserModel en userModel puis nettoyez/reconstruisez votre projet. J'ai eu le même problème et l'erreur a disparu lorsque j'ai défini la première lettre de mon dossier en minuscules. À l'avenir, utilisez camelCase pour le nom de vos dossiers, tout comme pour les variables. Les majuscules sur la première lettre correspondent généralement aux cours.
La raison en est que l'un des noms de vos packages commence par Capital.
Le nom de classe qui utilise la liaison de données doit commencer par majuscule, et nom du package doit commencer par minuscule. [Ce n'est pas seulement pour la liaison de données, c'est la convention suivie couramment]
[En interne, lorsque dataBinding génère bindingImplementation pour votre xml, il analyse le nom de votre package pour identifier la classe, si le nom du package commence par des majuscules, il ne peut pas séparer le nom de la classe du nom du package et génère une erreur.]
<data class="ProfileBinding">
<variable
name="user"
type="com.alen.ask.UserModel.User" />
</data>
utiliser la classe ProfileBinding mentionnée ci-dessus dans la classe Fragment pour gonfler
Essayez d'utiliser la méthode binding.setVariable.
Au fichier profile_fragment.xml
essayez de le remplacer
<data>
<variable
name="user"
type="com.alen.ask.UserModel.User" />
</data>
avec ça
<data>
<variable
name="user"
type="com.alen.ask.User" />
</data>
et faites-nous part de vos commentaires.