Переключить проверенное состояние флажка при нажатии
Я играю с моим первым приложением для Android - это простой калькулятор, который рассчитывает общую стоимость предмета на основе его окончательной цены продажи и любых других дополнительных сборов. Одним из таких сборов является налог, который не всегда применяется ко всем товарам, поэтому я добавил флажок, чтобы указать, применяется ли НДС при расчете стоимости.
Я создал метод в Java, чтобы переключить проверенное состояние флажка и связать его с событием onClick флажка, однако ничего не происходит, когда я нажимаю флажок.
Вот код Java:
public void changeCheckedState(View view) {
CheckBox checkBox = (CheckBox)findViewById(R.id.cbIncludeVAT);
checkBox.setChecked(!checkBox.isSelected());
}
Вот xml для представления флажка:
<CheckBox
android:id="@+id/cbIncludeVAT"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="26dp"
android:checked="true"
android:onClick="changeCheckedState"
android:text="Include VAT?"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/lblCardFee" />
Я запускаю / тестирую приложение на своем телефоне Android и не могу запустить отладку, поэтому не знаю, срабатывает ли вообще обработчик событий, когда я нажимаю флажок.
Я искал SO для решения и пробовал различные исправления, но, похоже, ничего не работает - флажок просто остается установленным (это состояние по умолчанию / начальное состояние).
1 ответ
флажок просто остается установленным (это состояние по умолчанию / начальное состояние).
Когда вы нажимаете на checkbox
checkBox.isSelected()
дает тебе true
а также !
перевернет его false
следовательно checkbox
всегда будет установлен на false
значит не проверено.
checkBox.isSelected() // true when your click
checkBox.setChecked(!checkBox.isSelected()); // ! will convert it to false
// so checkbox will always be set to unchecked by this code
Примечание: вам не нужно устанавливать checkbox
государство
public void changeCheckedState(View view) {
CheckBox checkBox = (CheckBox)findViewById(R.id.cbIncludeVAT);
// ^^^^ declare it outside
// initialize checkBox inside oncreate rather than doing on every click
if(checkBox.isSelected()){
// box is checked
}else{
// box is unchecked
}
}