Kotlin中使用ButterKnife,注解@BindView、@OnClick等不生效

习惯使用了java,那么正常情况下我们集成ButterKnife如下:

第一步:

android {

  // Butterknife requires Java 8.

  compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

  }

}

dependencies {

  implementation 'com.jakewharton:butterknife:10.1.0'

  annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

}

第二步:

buildscript {

  repositories {

    mavenCentral()

    google()

   }

  dependencies {

    classpath 'com.jakewharton:butterknife-gradle-plugin:10.1.0'

  }

}

第三步:

apply plugin: 'com.android.library'

apply plugin: 'com.jakewharton.butterknife'

然后我们就可以正常的代码中使用了,如下所示:

class Main2Activity extends Activity {

  @BindView(R2.id.user)EditText username;

  @BindView(R2.id.pass)EditText password;

@OnClick(R.id.button)

fun changeText(){

textView.setText("test kotlin")

}

...

}

但是,但是,注意了:当我们在kotlin中使用ButterKnife时,你会发现如上配置是有问题的

我们知道,使用ButterKnife对性能基本没有损失,因为ButterKnife用到的注解并不是在运行时反射的,而是在编译的时候生成新的class

按以上步骤,在kotlin中使用Butterknife,你会发现压根没有对应的class生成

Butterknife会为每一个类生成一个  classname_ViewBinding 的类,而事实上以下的配置并没有生成这个类,自然所有的注解绑定操作都不会生效的.那么我们可以确定一定是在编译期出现问题.

事实也是如此,kotlin有自己的注解处理器 kapt,在 Kotlin 中添加依赖与 Java 中类似,仅需要使用 Kotlin 注解处理工具(Kotlin Annotation processing tool,kapt)替代 annotationProcessor 即可

我们只需对如上配置稍做修改:

第三步中添加:

applyplugin:'kotlin-kapt'

第一步中:将

dependencies {

  implementation 'com.jakewharton:butterknife:10.1.0'

  annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'

}改为:

dependencies {

  implementation  'com.jakewharton:butterknife:10.1.0'

  kapt  'com.jakewharton:butterknife-compiler:10.1.0'

}

由此,所有注解生效,问题解决,一个很简单的问题

你可能感兴趣的:(Kotlin中使用ButterKnife,注解@BindView、@OnClick等不生效)