Я пытаюсь использовать кнопку-переключатель для отображения статуса проверки числа, когда число вводится в текстовое поле. Я уже настроил его с помощью TextView, и он отлично работает, но я хотел бы заменить его графически. Никаких ошибок не возникает со следующим, но состояние не изменяется с событиями .SetChanged в событии OnChanged:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ToggleButton togShortCircuit = (ToggleButton) findViewById(R.id.togShortCircuit);
togShortCircuit.setClickable(false);
final EditText txtOCVListen = (EditText) findViewById(R.id.txtOCV);
txtOCVListen.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
txtOCVListen.setFilters(new InputFilter[]{new CustomRangeInputFilter(0f, 16.0f)});
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (txtOCVListen.getText().toString().equals(null) || txtOCVListen.getText().toString().equals("")){
fltOCV = 0;
} else {
fltOCV = Float.parseFloat(txtOCVListen.getText().toString());
}
//Short Circuit
if (fltOCV < 10.6 && fltULV > 0 && fltULV <= 8.5) {
TextView lblShortCircuitStatus = (TextView) findViewById(R.id.lblShortCircuitStatus);
lblShortCircuitStatus.setText("True");
lblShortCircuitStatus.setTextColor(0xFFD51817); //Red
togShortCircuit.setChecked(true);
} else {
TextView lblShortCircuitStatus = (TextView) findViewById(R.id.lblShortCircuitStatus);
lblShortCircuitStatus.setText("False");
lblShortCircuitStatus.setTextColor(0xFF808080); //Grey
togShortCircuit.setChecked(false);
}
Кажется, не могу понять, как объявить togShortCircuit, чтобы он распознавался с событием. Использование Android Studio 3.12 и разработка для Android 7.0.
Похоже, что он срабатывает, когда я выполняю отладку, но состояние не меняется. если я поставлю togShortCircuit.setChecked (true); в основном теле onCreate он меняет состояние очень хорошо, поэтому я знаю, что это не xml. Похоже, он просто не проходит к объекту. Кроме того, интересное примечание: если я установил значение true в основном onCreate, setChecked в значение false в другой части оператора срабатывает, и состояние заметно меняется обратно на false, но все равно не возвращается на true в операторе if.




Нет ничего плохого в изменении состояния
ToggleButtonвнутриTextWatcher, я даже пробую это в своем коде. Вы отладили его и убедились, что код проходит через строкуtogShortCircuit.setChecked(true);?