事件与kotlin和butterknife处理

将java更改为kotlin代码后,ButterKnife单击注释不起作用。

@OnClick(R.id.btnlogin) internal fun onLogin() { if (isValid) { getLoginAPi() } } 

你有没有检查你连接ButterKnife正确? 你应该有你的build.gradle这些行:

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' //... other stuff kapt { generateStubs = true } dependencies { compile 'com.jakewharton:butterknife:8.6.0' kapt 'com.jakewharton:butterknife:8.6.0' } 

代码有几个可能的问题但是,让我们先来正确地设置Butterknife

确保你有以下

顶级build.gradle文件

 dependencies { classpath 'com.android.tools.build:gradle:3.0.0-alpha7' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.jakewharton:butterknife-gradle-plugin:8.6.0" } 

应用程序级别build.gradle文件

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' ... dependencies{ compile 'com.jakewharton:butterknife:8.6.0' kapt 'com.jakewharton:butterknife-compiler:8.6.0' } 

一旦完成,确保你所需要的所有东西都是公开的,所以把它改为

 @OnClick(R.id.btnlogin) fun onLogin() { if (isValid) { getLoginAPi() } } 

对于@BindView请确保您有以下语法

 @BindView(R.id.editTextKg) @JvmField var editTextKg: EditText? = null 

这将工作,因为Kotlin的默认可见性是公开的

@Gaket在他的代码中提到的那些代码也被大多数人推荐,但是它对我没有任何作用

你应该检查你的依赖关系,更具体地说,你应该使用kapt作为注释处理器:

 dependencies { ... compile 'com.jakewharton:butterknife:8.6.0' kapt 'com.jakewharton:butterknife-compiler:8.6.0' }