Kotlin中使用简洁明了的代码替换findViewByid
第一种(推荐使用)
Kotlin Android 扩展插件(Android Studio 内置)
首先添加
apply plugin: 'kotlin-android-extensions'
官方示例
// Using R.layout.activity_main from the 'main' source set import kotlinx.android.synthetic.main.activity_main.* class MyActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 替代 findViewById<TextView>(R.id.textView) textView.setText("Hello, world!") } }
第二种
在 Kotlin 中使用 ButterKnife
与 Java 中完全一致。 在 Gradle 构建脚本的修改如下,后面将重点介绍代码部分的差异。
在 Gradle 依赖中添加 kotlin-kapt
插件,并使用 kapt
替代 annotationProcessor
。
apply plugin: 'kotlin-kapt'
dependencies {
...
compile "com.jakewharton:butterknife:$butterknife-version"
kapt "com.jakewharton:butterknife-compiler:$butterknife-version"
}
我们已经将整个 ButterKnife 示例代码转换为 Kotlin, 参见详细代码。
让我门看看发生了什么变化。 在 Java 中使用注解对将变量与之对应的 view 进行绑定:
在 Kotlin 中使用属性而不是直接使用变量。 对属性使用注解:
@BindView(R2.id.title)
lateinit var title: TextView
@BindView
被定义为仅应用于变量字段,而将注解应用于整个属性时,Kotlin 编译器能够理解并且覆盖相应注解的字段。
lateinit 修饰符允许声明非空类型,并在对象创建后(构造函数调用后)初始化。 不使用 lateinit
则需要声明可空类型并且有额外的空安全检测操作。
使用 ButterKnife 注解可以将方法设置为监听器:
注意在onCreate方法里,添加
ButterKnife.bind(this@MainActivity)