Установка OnCheckedChangeListener с помощью лямбды - PullRequest
0 голосов
/ 17 октября 2018

Я хочу использовать лямбду, а не анонимный класс для OnCheckedChangeListener.

Исходный код для настройки прослушивателя работает нормально и читает:

mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        mCrime.setSolved(isChecked);
    }
});

Я попытался изменить его на лямбда, выполнив:

mCheckBox.setOnCheckedChangeListener(l -> mCrime.setSolved(isChecked));

, но я получилошибка из Android Studio, говорящая: не удается разрешить символ отмечен

Я думал, что лямбда разрешит isChecked неявным образом, хотя onCheckChanged принимает два аргумента.Что не так с моим пониманием?

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

isChecked - это просто имя параметра, которого нет, когда вы используете лямбда-выражения. Однако здесь есть правильная лямбда-выражение с именами параметров для вашего onCheckChangeListener

mCheckBox.setOnCheckedChangeListener((CompoundButton.OnCheckedChangeListener) (buttonView, isChecked) -> mCrime.setSolved(isChecked)); 
0 голосов
/ 17 октября 2018

Ваш синтаксис неправильный.То, что у вас есть, даже не должно компилироваться.Используйте это:

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

Материал перед -> представляет не слушателя, а аргументы, которые передаются этому слушателю, в данном случае это View и логическое значение.

0 голосов
/ 17 октября 2018

setOnCheckedChangeListener имеет два параметра

CompoundButton buttonView, boolean isChecked, поэтому лямбда-выражение будет

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

При этом я не достаточно знаком с лямбдами Java, чтобы знать,он может обрабатывать несколько параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...