未解析的引用数据绑定 - Android Studio 4.0



我不断收到错误:"未解析的引用:数据绑定"和"未解析的引用:活动主绑定"。
我正在使用Android Studio 4.0,Android Gradle插件版本:4.0.0和Gradle版本6.1.1。

build.gradle (模块: app(:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.twowaydatabinding"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
buildFeatures {
dataBinding = true
viewBinding = true
}
}
dependencies {
def lifecycle_version = "2.2.0"
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
}

build.gradle (Project(:

buildscript {
ext.kotlin_version = "1.3.72"
repositories {
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.example.twowaydatabinding.MainActivityViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- layout content -->
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

MainActivity.kt:

package com.example.twowaydatabinding
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import com.example.twowaydatabinding.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var viewModel : MainActivityViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
binding.viewModel = viewModel
binding.lifecycleOwner = this
}
}

MainActivityViewModel.xml:

package com.example.twowaydatabinding
import androidx.databinding.Bindable
import androidx.databinding.Observable
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class MainActivityViewModel : ViewModel(), Observable {
@Bindable
val userName = MutableLiveData<String>()
init {
userName.value = "Frank"
}
override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
TODO("Not yet implemented")
}
override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) {
TODO("Not yet implemented")
}
}

我试过了:

  • 生成 -> 清理项目,然后生成 -> 重建项目
  • 文件 -> 使缓存失效/重新启动

但无济于事。Class ActivityMainBinding 从不生成。
当我去声明import com.example.twowaydatabinding.databinding.ActivityMainBinding在MainActivity.kt中,它将我重定向到activity_main.xml。代码不显示任何错误,但是当我尝试生成项目时,会出现这些数据绑定错误。
我做错了什么?

而不是这一行

buildFeatures {
dataBinding = true
viewBinding = true
}

写下这一行

buildFeatures {
dataBinding true
viewBinding true
}

在主活动中尝试一下,

binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

这对我有用

1(删除".gradle"文件夹,delte".idea"文件夹并删除应用程序文件夹下的构建文件夹

2(点击"文件->使缓存失效/重新启动">

步骤 1:启用数据绑定

打开 build.gradle (模块:应用程序( 文件。 在 android 部分中,在右大括号之前,添加一个 buildFeatures 部分并将 dataBinding 设置为 true。

buildFeatures {
dataBinding true
}

步骤 2:将布局文件更改为可用于数据绑定

添加为最外层标记周围的 .

<layout>
<LinearLayout ... >
...
</LinearLayout>
</layout>

步骤 3:在主活动中创建绑定对象

import com.example.android.aboutme.databinding.ActivityMainBinding
private lateinit var binding: ActivityMainBinding

这是一个链接!

在build.gradle(Module:app(中添加这样的数据绑定

defaultConfig {
dataBinding {
enabled true
}
}

相关内容

最新更新