Aer*_*rim 4 android inline kotlin
我试图建立一个内联函数 setOnFocusChangeListener
这是我到目前为止所得到的:
inline fun EditText.onFocusChange(crossinline hasFocus: (Boolean) -> Unit) {
setOnFocusChangeListener(View.OnFocusChangeListener { view, b -> })
}
Run Code Online (Sandbox Code Playgroud)
我这样使用
freightTimeOfDay.onFocusChange { doSomething() }
Run Code Online (Sandbox Code Playgroud)
不幸的是,尽管它没有给我带来任何错误,doSomething()却从未被调用。
我在这里寻找两件事:
1-在其中获取一个参数,以便将其传递给doSomething()。例如
freightTimeOfDay.onFocusChange { doSomething(hasFocus) }
Run Code Online (Sandbox Code Playgroud)
2-使它工作:p,因为现在什么也没有发生。
更新:
好像Kotlin已经为此提供了某种内联类型
editText.setOnFocusChangeListener { view, b -> doSomething(b) }
Run Code Online (Sandbox Code Playgroud)
但是,这对我也不起作用,doSomething(hasFocus: Boolean)从未调用过。
提前致谢!
您只是忘了打电话hasFocus:
setOnFocusChangeListener(View.OnFocusChangeListener { view, b -> hasFocus(b) })
/\/\/\/\/\
Run Code Online (Sandbox Code Playgroud)
这是一个甜蜜且可读的语法:
yourEditText.setOnFocusChangeListener { _, hasFocus ->
if (hasFocus)
showSomething()
else
hideSomething()
}
Run Code Online (Sandbox Code Playgroud)
需要澄清的是,创建内联方法扩展并没有实际意义。这是我最初的目标,但后来我意识到使用:
editText.setOnFocusChangeListener { view, b -> doSomething(b) }
Run Code Online (Sandbox Code Playgroud)
有可能,它是内联的,很漂亮,不需要额外的工作
| 归档时间: |
|
| 查看次数: |
5828 次 |
| 最近记录: |