未解决的参考:BR(Android Studio)

JGu*_*Guo 14 kotlin android-studio android-databinding

我的顶级build.gradle:

buildscript {
    ext.kotlin_version = '1.2.41'
    ext.lifecycle_version = "1.1.1"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
Run Code Online (Sandbox Code Playgroud)

我的项目级build.gradle:

android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ...
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}
Run Code Online (Sandbox Code Playgroud)

我还android.databinding.enableV2=true为每个Google文档添加了gradle.properties(https://developer.android.com/topic/libraries/data-binding/start)

当我尝试运行时,它Unresolved reference: BR在我的BaseViewHolder班级中显示错误.似乎BR已经正确生成了类,但是.../R.java当我将鼠标移到类名上时,它还会在文件中找到重复的类.我做错了什么?

fun bind(obj: Any) {
        binding.setVariable(BR.obj, obj)
        binding.executePendingBindings()
}
Run Code Online (Sandbox Code Playgroud)

A. *_*gen 32

对于Android Studio 3.3,Gradle 3.3.0和Databinding v2,需要添加以修复此问题的唯一行是在您的(应用程序或模块)中build.gradle:

apply plugin: "kotlin-kapt"
Run Code Online (Sandbox Code Playgroud)

  • 对我来说(AS 4.2.1,Gradle 4.2.1)我必须将其添加到 `plugins{}`: `plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' }` (2认同)

nyx*_*xee 26

Android Studio 无法自动导入我的 BR 类。上面提供的所有解决方案都失败了。我只需要手动导入类,Android studio 已经正确创建了它。

样本:

package your_packagename

import your_packagename.BR
import ...
...

Run Code Online (Sandbox Code Playgroud)

我认为这是由于复制和粘贴而发生的。当我BR手动输入时,Android Stdio 会自动导入。


JGu*_*Guo 10

经过相当多的研究后,为了使用数据绑定库,需要添加一些东西

project build.gradle

buildscript {
    ext {
        compiler_version = '3.1.3'
    }
    dependencies {
        classpath "com.android.tools.build:gradle:$compiler_version"
    }
}
Run Code Online (Sandbox Code Playgroud)

app build.gradle

apply plugin: 'kotlin-kapt'

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:$compiler_version"
}

kapt {
    generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)

添加数据绑定库后,我开始有一些警告,比如3rd-party Gradle plug-ins may be the causeClasspath entry points to a non-existent location.但编译并运行良好

  • 我已经用`Android Studio 3.3,Gradle 3.3.0,Databinding v2`测试了它,我可以确认@Lyle评论的内容,*唯一需要添加的*行以避免`未解析的引用:BR`是`apply plugin :"kotlin-kapt"` (5认同)