Как программно установить (проверенное) состояние радиокнопки в Android?

У меня есть беспроводное устройство с клапаном, подключенным к приложению Android через Bluetooth LE. В приложении у меня есть макет активности с 2 radioButtons в radioGroup. При запуске мне нужно запросить внешнее устройство, чтобы определить текущее состояние клапана и соответственно установить радиокнопку в приложении. Моя основная стратегия заключается в следующем...

private RadioGroup valveStateRadioGroup;
private RadioButton valveOnRadioButton;
private RadioButton valveOffRadioButton;

static boolean valveOn = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // set view and init Bluetooth stuff here

    valveStateRadioGroup = (RadioGroup) findViewById(R.id.valve_State_Radio_Group);
    valveOnRadioButton = (RadioButton) findViewById(R.id.valve_on_radioButton);
    valveOffRadioButton = (RadioButton) findViewById(R.id.valve_off_radioButton);

    valveStateRadioGroup.clearCheck();

    valveStateRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        public void onCheckedChanged(RadioGroup group, int checkedId) {
                // do normal radioButton CLICKED stuff here
        }
    });
    queryValveState(); // call coms routine to get initial device status
}

public void queryValveState() {
    // code here that sends out a wireless query to the device
}

@Override
public synchronized void onDataAvailable(BluetoothGattCharacteristic characteristic) {
    //reply received from device, parse packet, determine valve status
    valveOn = false; // based on reply from device
    refeshUi();
}

private void refeshUi() {
    if (valveOn) {
        valveOnRadioButton.setChecked(true);
    }
    else {
        valveOffRadioButton.setChecked(true); // <<<<<<<<<<<< THIS is the problem
}

Проблема, с которой я сталкиваюсь, заключается в том, что когда valveOffRadioButton.setChecked (true) срабатывает, он никогда не запускает OnCheckedChangeListener и не обновляет виджет в пользовательском интерфейсе. Я могу установить состояние radioButton, если я делаю это в onCreate(). Я предполагаю, что мой фактический вопрос... Как вы устанавливаете radioButton в рутине вне onCreate()?

2 ответа

Решение

Спасибо Мутукришнану Раджендрану за ответ...

private void refeshUi() {
    runOnUiThread(new Runnable() {
        public void run() {
            if (valveOn) {
                valveOnRadioButton.setChecked(true);
            }
            else {
                valveOffRadioButton.setChecked(true);
            }
        }
    });
}

Поздно для ответа, но эта работа для меня:

((RadioButton)radioGroup.getChildAt(0)). SetChecked(истина);

С уважением

valveOnRadioButton.setChecked(истина);

Другие вопросы по тегам