У меня была похожая проблема, и я просто решил ее должным образом, не пытаясь избежать использования предполагаемого OnCheckedChangeListener
.
Код проблемы
holder.someCheckBox.setChecked(false);
holder.someCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
...
}
});
Примечание. Я установил статус проверки до . Я установил слушателя, это должно было предотвратить запуск слушателя при создании.
Но слушатель начал запускать событие проверки ровно дважды только после того, как адаптер был вынужден повторно создать или с помощью notifyDataSetChanged
.
Решение
Очистите слушателя до установки состояния проверки, даже при создании здесь.
holder.someCheckBox.setOnCheckedChangeListener(null);
holder.someCheckBox.setChecked(false);
holder.someCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
...
}
});
Теперь любые остаточные слушатели не будут срабатывать при установке начального значения флажка.