首页 > 解决方案 > 使用属性 lambda 或在 Kotlin/Android 中为侦听器/回调设置属性 lambda 的函数更好吗

问题描述

以下哪一项是在 Kotlin Android 中创建侦听器/回调的首选方式?我似乎在网上找不到任何信息

var onClickListener: (View) -> Unit
.....
view.onClickListener = {
    println("Clicked!")
}

或者

private var onClickListener: (View) -> Unit

fun setOnClickListener(listener: (View) -> Unit) {
    this.onClickListener = listener
}
.....
view.setOnClickListener {
    println("Clicked!")
}

有什么区别吗?第二个看起来“更干净”,它是 Java Android 中的所有侦听器都转换成的

标签: androidkotlinlambda

解决方案


在 Kotlin 中使用第一个;从 Java 调用时,setOnClickListener无论哪种方式。

第二个不允许您从类外部获取onClickListener值,因此如果您出于某种原因确实想阻止此类访问,则可以使用它。

这就是 Java Android 中的所有侦听器都转换成的

这就是您在使用 setter 方法而不是 getter 转换私有字段时所得到的。回调或Android(据我所知)没有特殊处理。

但是这种回调在 Java 中通常没有 getter 的原因是你需要更多的代码来编写它,而且它很少有用;在 Kotlin 中,您需要更多代码来省略它。


推荐阅读