我正在尝试为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)
从未被调用。
谢谢!
答案 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()
}