美文网首页Kotlin 实战kotlin
[Kotlin]View.OnClickListener在Kot

[Kotlin]View.OnClickListener在Kot

作者: 进击的小强 | 来源:发表于2018-03-19 22:42 被阅读173次

    题记:

    在kotlin中,调用函数时,如果参数为函数并且是最后一个参数,可以将参数移到括号外面。移动到括号外面之后如果括号内没有参数,括号可以省略不写。所以最终写法如上。

    View.OnClickListener的变身

    Kotlin对Lambda的完美支持,让我们写单函数时有了极速的提升。
    在Java中,对View添加一个点击事件时是这样写的:

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setVisibility(View.VISIBLE);
            ...
        }
    });
    

    而在Kotlin中我们使用它时,可以这样:

    view.setOnClickListener(object :View.OnClickListener{
        override fun onClick(v: View?) {
            v.visibility = View.VISIBLE    
            ...
        }
    })
    

    等等,这代码量看起来好像跟Java也差不多吧,除了少了个;
    别急,别急。这才是开始。根据lambda表达式规则:

    Ø  Lambda表达一般使用“{ }”包围。
    Ø  它的参数(如果有的话)在“->”前定义,参数类型可能是省略的。
    Ø  函数体跟在“->”后面。
    

    我们可把上面的代码简化为:

    view.setOnClickListener({ v ->
        v.visibility = View.VISIBLE    
        ...
    })
    

    根据如果参数为函数并且是最后一个参数,可以将参数移到括号外面。

    view.setOnClickListener() { v ->
        v.visibility = View.VISIBLE    
        ...
    }
    

    根据移动到括号外面之后如果括号内没有参数,括号可以省略不写。你见到的是这个。

    view.setOnClickListener { v ->
        v.visibility = View.VISIBLE    
        ...
    }
    

    根据若函数参数对应的函数只有一个参数,在使用时,可以省略参数定义,直接使用“it”代替参数,你最终看到的是这个。

    view.setOnClickListener {
        it.visibility = View.VISIBLE
    }
    

    简单吧。

    相关文章

      网友评论

      • 989977a78105:请教一下,“根据如果参数为函数并且是最后一个参数,可以将参数移到括号外面”,这个规则是kotlin还是lambda的规则?
        进击的小强:准确说来,这个是lambada表达式规则。但是kotlin完全支持lambda。所以说kotlin规则也是一样的。

      本文标题:[Kotlin]View.OnClickListener在Kot

      本文链接:https://www.haomeiwen.com/subject/wsopqftx.html