内联onFocusChange Kotlin

时间:2018-07-28 17:24:00

标签: android kotlin inline

我正在尝试为setOnFocusChangeListener构建内联函数

这是我到目前为止得到的:

inline fun EditText.onFocusChange(crossinline hasFocus: (Boolean) -> Unit) {
    setOnFocusChangeListener(View.OnFocusChangeListener { view, b -> })
}

我这样使用它

freightTimeOfDay.onFocusChange { doSomething() }

不幸的是,尽管它没有给我带来任何错误,但从未调用过doSomething()

我在这里寻找两件事:

1-在此获取参数,以便将其传递给doSomething()。 例如

freightTimeOfDay.onFocusChange { doSomething(hasFocus) }

2-使它起作用:p,因为现在什么也没有发生。

更新

好像kotlin已经为此使用了某种内联类型

editText.setOnFocusChangeListener { view, b -> doSomething(b) }

但这对我也不起作用,doSomething(hasFocus: Boolean)从未被调用。

谢谢!

3 个答案:

答案 0 :(得分:3)

您只是忘了打电话给hasFocus

setOnFocusChangeListener(View.OnFocusChangeListener { view, b -> hasFocus(b) })
                                                                 /\/\/\/\/\

答案 1 :(得分:3)

只需澄清一下,创建内联方法扩展确实没有意义。 这是我最初的目标,但后来我意识到使用:

editText.setOnFocusChangeListener { view, b -> doSomething(b) }

有可能,它是内联的,很漂亮,不需要额外的工作

答案 2 :(得分:1)

这是一种易于理解的语法:

yourEditText.setOnFocusChangeListener { _, hasFocus ->
    if (hasFocus)
        showSomething()
    else
        hideSomething()
}