修改匿名函数以在 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()
})