Android 侦听器绑定;找不到Setter
我正在尝试实现,但当我运行代码时,出现以下错误:Android 侦听器绑定;找不到Setter,android,kotlin,android-databinding,Android,Kotlin,Android Databinding,我正在尝试实现,但当我运行代码时,出现以下错误: Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding errors. ****/ data binding error ****msg:Cannot find the setter for attribute 'android:onClick' with parameter type lambda on android.widget.Bu
Caused by: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:onClick' with parameter type lambda on android.widget.Button. file:~/GithubBrowser/app/src/main/res/layout/loading_state.xml loc:30:31 - 30:52 ****\ data binding error ****
这是有问题的布局文件:
<?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">
<data>
<import type="com.example.app.data.model.Resource"/>
<import type="com.example.app.data.model.Status"/>
<variable name="resource" type="Resource"/>
<variable name="callback" type="com.example.app.ui.common.RetryCallback"/>
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:padding="@dimen/default_margin">
<Button android:id="@+id/retry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
android:onClick="@{() -> callback.retry()}"/>
</LinearLayout>
</layout>
编辑 顶级
build.gradle
:
buildscript {
ext.android_tools_version = '3.0.0-alpha3'
ext.kotlin_version = '1.1.2-5'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:$android_tools_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
ext {
architecture_version = '1.0.0-alpha2'
constraint_version = '1.0.2'
dagger_version = '2.11'
espresso_version = '2.2.2'
glide_version = '3.7.0'
junit_version = '4.12'
mockito_version = '2.7.19'
mock_server_version = '3.6.0'
moshi_version = '1.5.0'
retrofit_version = '2.2.0'
support_version = '25.4.0'
timber_version = '4.5.1'
}
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'https://maven.google.com' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
testCoverageEnabled !project.hasProperty('android.injected.invoked.from.ide')
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
kapt {
generateStubs = true
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
compile "com.android.support:appcompat-v7:$support_version"
compile "com.android.support:cardview-v7:$support_version"
compile "com.android.support:design:$support_version"
compile "com.android.support:recyclerview-v7:$support_version"
compile "com.android.support.constraint:constraint-layout:$constraint_version"
compile "android.arch.lifecycle:extensions:$architecture_version"
compile "android.arch.lifecycle:runtime:$architecture_version"
compile "android.arch.persistence.room:runtime:$architecture_version"
compile "com.google.dagger:dagger:$dagger_version"
compile "com.google.dagger:dagger-android:$dagger_version"
compile "com.google.dagger:dagger-android-support:$dagger_version"
compile "com.squareup.moshi:moshi:$moshi_version"
compile "com.squareup.retrofit2:retrofit:$retrofit_version"
compile "com.squareup.retrofit2:converter-moshi:$retrofit_version"
compile "com.github.bumptech.glide:glide:$glide_version"
compile "com.jakewharton.timber:timber:$timber_version"
kapt "com.android.databinding:compiler:$android_tools_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "android.arch.persistence.room:compiler:$architecture_version"
kapt "android.arch.lifecycle:compiler:$architecture_version"
testCompile "junit:junit:$junit_version"
testCompile "com.squareup.okhttp3:mockwebserver:$mock_server_version"
testCompile ("android.arch.core:core-testing:$architecture_version", {
exclude group: 'com.android.support', module: 'support-compat'
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.android.support', module: 'support-ccore-utils'
})
androidTestCompile "com.android.support:appcompat-v7:$support_version"
androidTestCompile "com.android.support:cardview-v7:$support_version"
androidTestCompile "com.android.support:design:$support_version"
androidTestCompile "com.android.support:recyclerview-v7:$support_version"
androidTestCompile ("com.android.support.test.espresso:espresso-core:$espresso_version", {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile ("com.android.support.test.espresso:espresso-contrib:$espresso_version", {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile "org.mockito:mockito-android:$mockito_version"
}
和应用程序模块build.gradle
:
buildscript {
ext.android_tools_version = '3.0.0-alpha3'
ext.kotlin_version = '1.1.2-5'
repositories {
maven { url 'https://maven.google.com' }
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:$android_tools_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
ext {
architecture_version = '1.0.0-alpha2'
constraint_version = '1.0.2'
dagger_version = '2.11'
espresso_version = '2.2.2'
glide_version = '3.7.0'
junit_version = '4.12'
mockito_version = '2.7.19'
mock_server_version = '3.6.0'
moshi_version = '1.5.0'
retrofit_version = '2.2.0'
support_version = '25.4.0'
timber_version = '4.5.1'
}
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url 'https://maven.google.com' }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
debug {
testCoverageEnabled !project.hasProperty('android.injected.invoked.from.ide')
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dataBinding {
enabled = true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
kapt {
generateStubs = true
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
compile "com.android.support:appcompat-v7:$support_version"
compile "com.android.support:cardview-v7:$support_version"
compile "com.android.support:design:$support_version"
compile "com.android.support:recyclerview-v7:$support_version"
compile "com.android.support.constraint:constraint-layout:$constraint_version"
compile "android.arch.lifecycle:extensions:$architecture_version"
compile "android.arch.lifecycle:runtime:$architecture_version"
compile "android.arch.persistence.room:runtime:$architecture_version"
compile "com.google.dagger:dagger:$dagger_version"
compile "com.google.dagger:dagger-android:$dagger_version"
compile "com.google.dagger:dagger-android-support:$dagger_version"
compile "com.squareup.moshi:moshi:$moshi_version"
compile "com.squareup.retrofit2:retrofit:$retrofit_version"
compile "com.squareup.retrofit2:converter-moshi:$retrofit_version"
compile "com.github.bumptech.glide:glide:$glide_version"
compile "com.jakewharton.timber:timber:$timber_version"
kapt "com.android.databinding:compiler:$android_tools_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "android.arch.persistence.room:compiler:$architecture_version"
kapt "android.arch.lifecycle:compiler:$architecture_version"
testCompile "junit:junit:$junit_version"
testCompile "com.squareup.okhttp3:mockwebserver:$mock_server_version"
testCompile ("android.arch.core:core-testing:$architecture_version", {
exclude group: 'com.android.support', module: 'support-compat'
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.android.support', module: 'support-ccore-utils'
})
androidTestCompile "com.android.support:appcompat-v7:$support_version"
androidTestCompile "com.android.support:cardview-v7:$support_version"
androidTestCompile "com.android.support:design:$support_version"
androidTestCompile "com.android.support:recyclerview-v7:$support_version"
androidTestCompile ("com.android.support.test.espresso:espresso-core:$espresso_version", {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile ("com.android.support.test.espresso:espresso-contrib:$espresso_version", {
exclude group: 'com.android.support', module: 'support-annotations'
exclude group: 'com.google.code.findbugs', module: 'jsr305'
})
androidTestCompile "org.mockito:mockito-android:$mockito_version"
}
我刚刚遇到了这个问题,我已经设法通过删除.idea、.gradle和gradle文件夹来解决它,并让Android Studio从gradle文件中从头开始重新创建整个项目。只需重建项目。这可能是因为您进行了一些重构
现在一切都应该恢复正常。正如所有其他兄弟建议的那样,是的,删除.idea、.gradle和gradle文件夹后,错误会得到解决 (这只是为了好奇为什么会发生这种情况的人,下面是我的用例):
我认为这个问题是在我的项目中造成的,因为我最近添加了一个rxRecycleViewDataBinding自定义库,它可能会由于混合绑定引用而导致一些绑定错误。确保
应用插件:“kotlin kapt”
在build.gradle中
如果您正在执行此操作,并且没有重建项目、删除目录、清除设置等任何操作。没有IDE就可以了,但是建筑失败了
如果android studio对此有更好的错误消息,那就太好了。
重建项目对我来说很有效
- 从
Build>重建重建项目
- 修复生成日志中出现的问题
- 从
生成>重新生成重新生成项目
如果类型为LiveData
的成员变量遇到类似的问题,请检查XML文件中的lambda,以了解如何在视图的onClick
中调用函数“@{()->variableName.callMethod()}”
用于变量“@{variableName.memebervariabename}”
已使用。错误找不到属性的setter
意味着找不到接受您提供的数据类型变量作为该属性参数的setter方法
这意味着它找不到您定义的BindingAdapter方法。我遇到这个问题是因为我在XML布局中为使用BindingAdapter定义的自定义属性提供了错误的数据类型。一旦我为自定义属性指定了正确的数据类型,它就工作了
因此,请检查您是否为使用BindingAdapters定义的自定义属性提供了正确的数据类型。。它对我来说就像一个符咒。。。你还有其他问题吗?你能发布你的build.gradle
s吗?@Lovis当然,addedremovekapt{generateStubs=true}
,kapt3是不允许的(您使用的是kapt3,因为您应用插件kotlin kapt
,如果这没有帮助,可能是Studio 3.0的问题,我会等到它解决了final@Lovis啊,我甚至没想过要检查它是否是3.0版的问题。不过我试过使用和不使用kapt{generateStubs=true}
。我在2.3.3版中打开了这个项目(并降低了渐变版本),运行良好!感谢您的帮助。接受Matej Drobnic的回答!谢谢。它很有效。我现在知道的是,如果发生错误,请先删除.gradle文件,然后删除.idea文件:D@AjayShrestha删除.gradle为我修复了它,谢谢!删除.gradle和.idea对我有效,我在getter方法上遇到了问题。很好的捕获,谢谢同样!它正在工作。在我的例子中,我更改了项目包名称和应用程序名称。我想Android studio已经搞错了。这!!!我为此浪费了大约2个小时,用放大镜检查stackoverflow。不断发现一些东西说“这是xml错误,请确保变量正确,公共获取程序等。”…-没什么问题,只是一个丑陋的android studio bug。这应该是可以接受的答案。我能问一下如何在项目根目录中运行gradle包装器吗?我几乎每次编译app@leyreyyan如果您在mac上,您可以运行“brew安装gradle”。此外,我还添加了一个有时对我有效的附加修复程序。这一个有帮助。清理项目和删除.idea和.gradle文件没有帮助,但应用插件有帮助。确实。清理和重新导入没有帮助。看起来android插件对“kapt”有“无声”依赖插件。如果不满意,并且您的模块中有数据绑定注释,它会给出上面的错误消息。我很惊讶@androiddev的家伙到目前为止没有添加有用的消息!