android - 将 lambda 存储在 kotlin 中的变量中

标签 android lambda kotlin

我开始使用 kotlin 在 Android 中进行开发,但我遇到了 lambdas 的问题。我有一个在我的 View 中设置监听器的函数,它看起来像这样:

fun setListener(listener: () -> Unit) {
}

问题是作为 lambda 传递的代码不会在 setListener 函数中执行,它将在我的代码的另一部分中执行(特别是在选择微调器的项目时),所以我必须“保存”或将此lambda“存储”到变量/属性中,以便我能够在需要时执行它。知道怎么做吗?

编辑:我做到了:

private var listener: (() -> Unit)? = null

fun setListener(listener: () -> Unit) {
    this.listener = listener
}

有没有更好的方法呢?谢谢

最佳答案

你可以这样做:

class Foo {
    private var listener: () -> Unit = {}
    fun setListener(listener: () -> Unit) {
        this.listener = listener
    }
}

但是,在 Kotlin 中不鼓励手动编写 setter。相反,您可以将您的属性(property)公开:

class Foo {
    var listener: () -> Unit = {}
}

作为引用,这里是 docs about properties有很多例子。

关于android - 将 lambda 存储在 kotlin 中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43811599/

相关文章:

android - 类内的合成绑定(bind)上的空对象引用错误

android - 如何同时在屏幕上绘制2个PNG图片

c# - 如何编译带有参数操作的 MethodCallExpression?

Salesforce Apex 中的 Lambda

java - 为什么 float 和 double lambda 参数仅限于 float value set,double value set?

inheritance - 是否可以向 Kotlin 中的现有类添加接口(interface)?

android - Fabric 与 Android Studio 的集成

android - 如何在android中解析dns?

android - 为安卓制作我自己的字体

java - 将 fragment 作为参数传递给 RecyclerView.Adapter 是一种不好的做法吗?帮助点击