gpt4 book ai didi

android - 为什么开发人员不直接将参数传递给 setOnCheckedChangeListener

转载 作者:行者123 更新时间:2023-12-02 13:40:04 31 4
gpt4 key购买 nike

我是安卓新手。
这是代码:

Switch.setOnCheckedChangeListener { _, isChecked ->
// do something}
我已经在 C++ 中完成了一些编码,所以我知道我必须像这样调用它
variable = OnCheckedChangeListener    
Switch.setOnCheckedChangeListener**(variable)** { _, isChecked ->
// do something}
我不知道为什么这个函数没有我传入任何参数就可以工作。
非常感谢你。

最佳答案

如果我们查看 Switch 的源代码看,setOnCheckedChangeListener()方法定义如下:

fun setOnCheckedChangeListener(listener: CompoundButton.OnCheckedChangeListener?) {
mOnCheckedChangeListener = listener
}
它确实需要一个参数,形式为接口(interface) OnCheckedChangeListener ,其定义如下所示:
interface OnCheckedChangeListener {
fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean)
}
它只有一种方法。只有一个抽象方法的接口(interface)称为功能接口(interface)或单一抽象方法 (SAM) 接口(interface)。
对于函数式接口(interface),您可以使用 SAM 转换,通过使用 lambda 表达式使您的代码更加简洁和易读。
您可以使用 lambda 表达式,而不是手动创建实现功能接口(interface)的类。通过 SAM 转换,Kotlin 可以将任何签名与接口(interface)的单个​​方法的签名匹配的 lambda 表达式转换为实现该接口(interface)的类的实例。
所以你不必传入 OnCheckedChangeListener 的实例的原因, 是因为语法糖,Kotlin 允许你只定义接口(interface)描述的方法体,它会在幕后创建和传递参数。
如果你想自己做,它看起来像这样:
switch.setOnCheckedChangeListener(object : OnCheckedChangeListener {
override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
// do something
}
})
  • Official documentation
  • 关于android - 为什么开发人员不直接将参数传递给 setOnCheckedChangeListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64396966/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com