onCheckedChanged систематически вызывается при инициализации метода

У меня есть метод bindView, который реализует setOnCheckedChangeListener. Однако при инициализации этого метода систематически вызывается метод onCheckedChanged. Как я мог этого избежать? Вот мой код:

public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    
    alarm_activation = cursor.getColumnIndexOrThrow(mydb.ALARMS_ACTIVATED);
    activationInt = cursor.getInt(alarm_activation);
    alarm_id_ind = cursor.getColumnIndexOrThrow("rowid");
    alarm_id_int = cursor.getInt(alarm_id_ind);
    StrLog = String.valueOf(alarm_id_int);

    Log.e("Row ID", StrLog);
    alarm_activated = (ToggleButton)view.findViewById(R.id.alarm_activated);
    alarm_activated.setTag(alarm_id_int);

    if (activationInt == 1) {
        alarm_activated.setChecked(true);
        alarm_activated.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
        activateAlarm(alarm_id_int);
    } else {
        alarm_activated.setChecked(false);
    }

    alarm_activated.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                buttonView.getBackground().setColorFilter(Color.BLUE, PorterDuff.Mode.MULTIPLY);
                row = (Integer) buttonView.getTag();
                mydb.activateAlarm(row);
                activateAlarm(alarm_id_int);
            } else {
                buttonView.getBackground().setColorFilter(Color.LTGRAY, PorterDuff.Mode.MULTIPLY);
                row = (Integer) buttonView.getTag();
                mydb.deactivateAlarm(row);
            }
        }
    });
}

person JF0001    schedule 23.11.2017    source источник
comment
Возможный дубликат onCheckedChanged вызывается автоматически   -  person Ruan_Lopes    schedule 23.11.2017
comment
Спасибо Руан. Это действительно дублирующий вопрос. Как указано в моих комментариях к приведенному ниже решению, я действительно видел это решение, но, поскольку у меня уже было условие if (isChecked), я сначала подумал, что isPressed() будет избыточным, хотя на самом деле это не так, после осознания того, что Я неправильно интерпретировал предложение isChecked (как проверяемое сейчас...). Еще раз спасибо. Дж   -  person JF0001    schedule 24.11.2017


Ответы (1)


Вы можете избежать этого, проверив, что слушатель запускается после нажатия вашего представления или нет, проверив

buttonView.isPressed()

Это позволит избежать автоматического запуска прослушивателя CheckChange.

person demo_Ashif    schedule 23.11.2017
comment
Спасибо, Ашиф. Я видел это решение в другом потоке, но, поскольку у меня уже было условие if (isChecked), я сначала подумал, что isPressed() будет избыточным, хотя на самом деле это не так, после того как понял, что неправильно интерпретировал предложение isChecked. (как сейчас проверяется...). Еще раз спасибо за ваше время. Дж - person JF0001; 24.11.2017