使用kotlin和butterknife进行事件处理

时间:2017-05-30 10:52:00

标签: android kotlin butterknife

将java更改为kotlin代码后,ButterKnife点击注释无法正常工作。

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

3 个答案:

答案 0 :(得分:2)

你检查过你是否正确连接了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'
}

答案 1 :(得分:1)

代码存在一些可能的问题 但是,让我们首先开始正确设置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在他的代码中提到的Gnerating存根也被大多数人推荐,但是对我来说没有它的作用

答案 2 :(得分:0)

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

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