一脸懵逼之Kotlin使用ButterKnife无效问题

来源:互联网 发布:tensorflow lite官网 编辑:程序博客网 时间:2024/05/18 12:37

此文章适用于Android Studio3.0之前的正式版本,现在3.0正式版已经出来了,并不需要自己手动去配置


前端时间太忙导致天天加班天天没空;现在呢,每个星期出一个功能,哎,蛋疼,不过这就是程序员的宿命吧,认了。。。

不过呢,自从出了Kotlin之后呢,只看了一点点小东西,只大概知道了一点点语法,对于在Kotlin上引用其他的一些框架等,自己还不熟悉,学习的路很漫长,趁着有空学习学习,写写博客。。。

今天呢,想用Kotlin来写一个程序,可是用findViewById来获取控件觉得不方便,就想着ButterKnife能否在Kotlin也用上呢?既然Kotlin也是基于Java,写Android方面也是同样编译成J2ME,那为什么不能用ButterKnife呢???好了,废话不多说,直接说说我使用的过程和遇到的 问题,还有解决方式吧,网上搜的太碎片化,甚至都是没用的,还是自己搞出来才有印象。

在Kontlin使用ButterKnife:

1、我创建了一个普通的Android项目,在该Android项目当中引用了Kontlin框架,配置如下:

打开项目主目录下的build.gradle文件,定义好kotlin版本和butterknife的相关版本号:

buildscript {    ext.kotlin_version = '1.1.3-2'    ext.butterknife_version='8.6.0'    //省略}
2、同样在该文件当中:

dependencies {    classpath 'org.greenrobot:greendao-gradle-plugin:3.2.0'    classpath 'com.android.tools.build:gradle:2.3.3'    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'      //加上这行    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"    classpath "com.jakewharton:butterknife-gradle-plugin:$butterknife_version"}
其中classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
是在普通Android项目当中引用butterknife需要添加的配置,详情可看我上一篇文章,在这里不多做赘述了。

后面两句就是加上kotlin和butterknife插件

3、接着,打开app目录当中的build.gradle文件,添加

apply plugin: 'kotlin-android'//注解框架需要apply plugin: 'android-apt'
并且在 dependencies {}当中添加相关的第三方包,如下配置:

compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"//注解框架需要
compile 'com.jakewharton:butterknife:$butterknife_version'
apt "com.jakewharton:butterknife-compiler:$butterknife_version"
好了,到此为止,你会发现你在普通的Activity类当中使用ButterKnife框架相应的注解式开发没有任何问题,可是问题来了,当你新建了一个Kotlin文件,后缀为.kt的Activity,如MainActivity.kt,这个使用你使用原来方式的ButterKnife注解式开发是完全无效的。

那么问题来了,我们就得解决问题,搞了两个小时,查了很多碎片化的资料,原来配置方面还需要添加东西,修改方式如下:

1、在项目主目录的build.gradle文件当中。。。。嘿嘿嘿,这个文件不需要改

2、再进入app目录当中的build.gradle文件里,添加插件applyplugin:'kotlin-kapt'  ,并且在dependencies {}当中添加

kapt "com.jakewharton:butterknife-compiler:$butterknife_version"

看到这里,是否发现了什么呢???当你在普通的Android项目当中使用butterknife时候,用apt,这里用了kapt。。。。好吧,别想太多,可以大概的理解为使用kapt添加进来的butterknife框架才适用于kotlin就行了。。。

3、OK,到此未知,如何在MainActivity.kt里使用呢?方式如下:

在onCreate方法里,添加
ButterKnife.bind(this@MainActivity)
对于控件绑定,如下
@BindView(R.id.id_tradition_bt)lateinit var mIdTraditionBt: Button@BindView(R.id.id_novel_bt)lateinit var mIdNovelBt: Button
然后其他的注解式方式就跟普通的Android注解式是差不多的了。。。