为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Lambda 设置 OnCheckedChangeListener

使用 Lambda 设置 OnCheckedChangeListener

素胚勾勒不出你 2021-11-24 14:39:14
我想对 OnCheckedChangeListener 使用 lambda 而不是匿名类。设置侦听器的原始代码工作正常,内容如下:mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {    @Override    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {        mCrime.setSolved(isChecked);    }});我尝试通过执行以下操作将其更改为 lambda:mCheckBox.setOnCheckedChangeListener(l -> mCrime.setSolved(isChecked));但我收到来自 Android Studio 的错误消息:无法解析符号已检查。我原以为 lambda 会隐式解析 isChecked,即使 onCheckChanged 需要两个参数。我的理解有什么问题?
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

你的语法是错误的。你所拥有的甚至不应该编译。用这个:

mCheckBox.setOnCheckedChangeListener((view, isChecked) -> mCrime.setSolved(isChecked));

前面的东西->不代表侦听器,而是在该侦听器中传递的参数,在这种情况下是一个视图和一个布尔值。



查看完整回答
反对 回复 2021-11-24
?
萧十郎

TA贡献1815条经验 获得超12个赞

isChecked 只是一个参数名称,当您使用 lambdas 时它不存在,但是这里是正确的 lambda 和您的 onCheckChangeListener 的参数名称

mCheckBox.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) (buttonView, isChecked) -> mCrime.setSolved(isChecked));


查看完整回答
反对 回复 2021-11-24
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

setOnCheckedChangeListener 有两个参数

CompoundButton buttonView, boolean isChecked,所以 lambda 语句将是

mCheckBox.setOnCheckedChangeListener(buttonView, isChecked -> mCrime.setSolved(isChecked))

话虽如此,我对 Java lambdas 还不够熟悉,不知道它是否可以处理多个参数。


查看完整回答
反对 回复 2021-11-24
  • 3 回答
  • 0 关注
  • 201 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信