ButterKnife + Kotlin 使用及问题

1、配置

怎么引入butterknife依赖就不说了,可参考官方。不过引入butterknife-compiler时不能使用annotationProcessor,要改为kapt。

apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'

dependencies {
	...
	// annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'
	kapt 'com.jakewharton:butterknife-compiler:8.8.1'
}

让butterknife支持在kotlin中绑定view,有两种方式:

@BindView(R2.id.linear_parent)
lateinit var mParentLinear: LinearLayout

//或者
@BindView(R2.id.linear_parent)
@JvmField var mParentLinear: LinearLayout?=null;

可能遇到问题

1) 当app module和library module同时使用butterknife时,会出现"Unable to find resource ID"

这个可以算是kotlin的一个bug,butterknife 并不是完全支持现在的kotlin,导致library中的R.id.abc 和 app module中的R.id.abc不一致,所以会出现这个问题。 github上同样有人遇到这个问题issues,并最后结论是在kotlin1.3.20即将解决此问题。
截至现在(2019年1月11日),kotlin出了两个版本都可解决此问题:1.3.20-eap-25、1.3.20-eap-52。不过升级时有一点需要注意:

buildscript {
	ext.kotlin_version = '1.3.20-eap-52'
	repositories {
		 maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
	}
}
allprojects {
    repositories {
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }
}

你可能感兴趣的:(kotlin,Android)