Переключить проверенное состояние флажка при нажатии

Я играю с моим первым приложением для 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 ответ

флажок просто остается установленным (это состояние по умолчанию / начальное состояние).

Когда вы нажимаете на checkboxcheckBox.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 
    }
}
Другие вопросы по тегам