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!") } }

第二种

ButterKnife

在 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 修饰符允许声明非空类型,并在对象创建后(构造函数调用后)初始化。 不使用 lateinit 则需要声明可空类型并且有额外的空安全检测操作。

使用 ButterKnife 注解可以将方法设置为监听器:

@OnClick(R2.id.hello)
internal fun sayHello() {
    Toast.makeText(this, "Hello, views!", LENGTH_SHORT).show()
}

 注意在onCreate方法里,添加

ButterKnife.bind(this@MainActivity)

posted @ 2018-02-11 14:13  雪舞樱飞  阅读(290)  评论(0编辑  收藏  举报