Как программно установить (проверенное) состояние радиокнопки в 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(истина);
С уважением