我的代码中的点击侦听器很少,如下所示:
tvLogin.setOnClickListener {
hideKeyBoard(it)
login()
}
tvForgotPassword.setOnClickListener {
hideKeyBoard(it)
navigateToForgetPassword()
}
我想修改传递的代码块,以便始终调用hideKeyBoard(view)
然后调用我的函数。
有没有办法创建一个更高阶的函数来修改代码块并调用传递的函数?
我尝试了类似下面的内容:
val clickListener: (View,()->Unit) -> Unit
但不确定它是如何起作用的。
有谁可以帮助如何实现?
答案 0 :(得分:3)
我不确定我完全理解你的意思,但也许是这样的:
fun addCallTo(lambda: (View) -> Unit): (View) -> Unit {
return {
hideKeyboard(it)
lambda(it)
}
}
// usage:
tvLogin.setOnClickListener(addCallTo { view -> login() })
答案 1 :(得分:2)
您可以扩展View.OnClickListener
并将lambda传递给它:
inner class HideKeyboardClickListener(private val lambda: () -> Unit) : View.OnClickListener {
override fun onClick(v: View) {
hideKeyboard(v)
lambda()
}
}
然后像这样设置:
tvForgotPassword.setOnClickListener(HideKeyboardClickListener {
navigateToForgetPassword()
})