第一种(推荐使用)
(Android Studio 内置)
首先添加
apply plugin: 'kotlin-android-extensions'
官方示例
// Using R.layout.activity_main from the 'main' source setimport kotlinx.android.synthetic.main.activity_main.*class MyActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 替代 findViewById(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 进行绑定:
@BindView(R2.id.title) TextView title;
在 Kotlin 中使用而不是直接使用变量。 对属性使用注解:
@BindView(R2.id.title)lateinit var title: TextView
@BindView
被定义为仅应用于变量字段,而将注解应用于整个属性时,Kotlin 编译器能够理解并且覆盖相应注解的字段。
允许声明非空类型,并在对象创建后(构造函数调用后)初始化。 不使用 lateinit
则需要声明并且有额外的空安全检测操作。
使用 ButterKnife 注解可以将方法设置为监听器:
@OnClick(R2.id.hello)internal fun sayHello() { Toast.makeText(this, "Hello, views!", LENGTH_SHORT).show() }
注意在onCreate方法里,添加
ButterKnife.bind(this@MainActivity)