代码之家  ›  专栏  ›  技术社区  ›  krupal.agile

修改匿名函数以调用kotlin中的另一个匿名函数

  •  1
  • krupal.agile  · 技术社区  · 8 年前

    我的代码中很少有点击监听器,如下所示:

    tvLogin.setOnClickListener {
        hideKeyBoard(it)
        login()
    }
    
    tvForgotPassword.setOnClickListener {
        hideKeyBoard(it)
        navigateToForgetPassword()
    }
    

    我想修改传递的代码块以始终调用 hideKeyBoard(view) 然后是我的职责。

    有没有办法创建一个更高阶的函数来修改代码块并调用传递的函数?

    我试过如下方法:

    val clickListener: (View,()->Unit) -> Unit 
    

    但不确定它会如何工作。

    有人能帮忙实现吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Sweeper    8 年前

    我不太明白你的意思,但可能是这样的:

    fun addCallTo(lambda: (View) -> Unit): (View) -> Unit {
      return { 
        hideKeyboard(it)
        lambda(it)
      }
    }
    
    // usage:
    tvLogin.setOnClickListener(addCallTo { view -> login() })
    
        2
  •  2
  •   mol    8 年前

    你可以延长 View.OnClickListener 把兰姆达递给它:

    inner class HideKeyboardClickListener(private val lambda: () -> Unit) : View.OnClickListener {
        override fun onClick(v: View) {
            hideKeyboard(v)
            lambda()
        }
    }
    

    然后这样设置:

    tvForgotPassword.setOnClickListener(HideKeyboardClickListener {
        navigateToForgetPassword()
    })