猿问

使用 Lambda 设置 OnCheckedChangeListener

我想对 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 需要两个参数。我的理解有什么问题?


素胚勾勒不出你
浏览 203回答 3
3回答

弑天下

你的语法是错误的。你所拥有的甚至不应该编译。用这个:mCheckBox.setOnCheckedChangeListener((view, isChecked) -> mCrime.setSolved(isChecked));前面的东西->不代表侦听器,而是在该侦听器中传递的参数,在这种情况下是一个视图和一个布尔值。

萧十郎

isChecked 只是一个参数名称,当您使用 lambdas 时它不存在,但是这里是正确的 lambda 和您的 onCheckChangeListener 的参数名称mCheckBox.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) (buttonView, isChecked) -> mCrime.setSolved(isChecked));

慕码人2483693

setOnCheckedChangeListener 有两个参数CompoundButton buttonView, boolean isChecked,所以 lambda 语句将是mCheckBox.setOnCheckedChangeListener(buttonView, isChecked -> mCrime.setSolved(isChecked))话虽如此,我对 Java lambdas 还不够熟悉,不知道它是否可以处理多个参数。
随时随地看视频慕课网APP

相关分类

Java
我要回答