修改匿名函数以在 Kotlin 中调用另一个匿名函数
Modifying an anonymous function to invoke another anonymous function in Kotlin
我的代码中几乎没有点击侦听器,如下所示:
tvLogin.setOnClickListener {
hideKeyBoard(it)
login()
}
tvForgotPassword.setOnClickListener {
hideKeyBoard(it)
navigateToForgetPassword()
}
我想修改传递的代码块以始终调用 hideKeyBoard(view)
然后调用我的函数。
有没有办法创建一个高阶函数来修改代码块并调用传递的函数?
我尝试过类似下面的方法:
val clickListener: (View,()->Unit) -> Unit
但不确定它是如何工作的。
谁能帮忙实现一下?
我不确定我是否完全理解你的意思,但也许是这样的:
fun addCallTo(lambda: (View) -> Unit): (View) -> Unit {
return {
hideKeyboard(it)
lambda(it)
}
}
// usage:
tvLogin.setOnClickListener(addCallTo { view -> login() })
您可以扩展 View.OnClickListener
并将 lambda 传递给它:
inner class HideKeyboardClickListener(private val lambda: () -> Unit) : View.OnClickListener {
override fun onClick(v: View) {
hideKeyboard(v)
lambda()
}
}
然后这样设置:
tvForgotPassword.setOnClickListener(HideKeyboardClickListener {
navigateToForgetPassword()
})
我的代码中几乎没有点击侦听器,如下所示:
tvLogin.setOnClickListener {
hideKeyBoard(it)
login()
}
tvForgotPassword.setOnClickListener {
hideKeyBoard(it)
navigateToForgetPassword()
}
我想修改传递的代码块以始终调用 hideKeyBoard(view)
然后调用我的函数。
有没有办法创建一个高阶函数来修改代码块并调用传递的函数?
我尝试过类似下面的方法:
val clickListener: (View,()->Unit) -> Unit
但不确定它是如何工作的。
谁能帮忙实现一下?
我不确定我是否完全理解你的意思,但也许是这样的:
fun addCallTo(lambda: (View) -> Unit): (View) -> Unit {
return {
hideKeyboard(it)
lambda(it)
}
}
// usage:
tvLogin.setOnClickListener(addCallTo { view -> login() })
您可以扩展 View.OnClickListener
并将 lambda 传递给它:
inner class HideKeyboardClickListener(private val lambda: () -> Unit) : View.OnClickListener {
override fun onClick(v: View) {
hideKeyboard(v)
lambda()
}
}
然后这样设置:
tvForgotPassword.setOnClickListener(HideKeyboardClickListener {
navigateToForgetPassword()
})