CheckBox onCheckedChanged не вызывается после программного изменения отмеченного состояния?

В моем коде я setOnCheckedChangeListener до установки начального значения на CheckBox, но метод слушателя не вызывается после установки начального значения:

final CheckBox check_box = convertView.findViewById(R.id.check_box);

check_box.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

// Some logic 
}
}

После строки выше я установил начальное значение для CheckBox следующим образом:

if (isConditionTrue) {
            check_box.setChecked(true);
        } else {
            check_box.setChecked(false);
        }
}

Но метод слушателя onCheckedChanged никогда не вызывался, когда программно изменял значение проверки с помощью метода setChecked(), но когда пользователь изменяет его через отображение, он вызывается. Это нормальное поведение или я неправильно его реализовал?

Каково начальное состояние вашего флажка? Проверено не отмечено? А в чем ценность isConditionTrue?

Sagar 10.06.2018 10:36

Попробуйте изменить его с отмеченного на выбранный

Gil Goldzweig 10.06.2018 10:39
4
2
550
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

setOnCheckedChangeListener() вызывается при изменении отмеченного состояния этой кнопки. Однако, глядя на ваш код, похоже, что состояние флажка не меняется.

if (isConditionTrue) {
            check_box.setChecked(true);
        } else {
            check_box.;
        }
}

Если isConditionTrue имеет значение false и check_box уже не отмечен, то setChecked(false) не приведет к вызову setOnCheckedChangeListener. То же самое относится и к уже отмеченному флажку, и вы пытаетесь использовать setChecked(true);.

ваше предложение кажется верным, поскольку его состояние по умолчанию не отмечено, и я установил его setChecked (false), из-за чего он не запускал метод слушателя, спасибо :)

Prashant 10.06.2018 11:22

@pcj отлично! Наслаждайтесь кодированием :-)

Sagar 10.06.2018 11:28

Да, это нормальное поведение. Поскольку слушатель прикреплен к флажку, когда вы измените его в пользовательском интерфейсе приложения, он вызовет. Но если вы измените его программно, он не будет выполняться.

Другие вопросы по теме