以编程方式检查的RadioButton不会取消选中

时间:2016-12-07 13:51:36

标签: android radio-button radio-group

我在RadioGroup中设置了这些RadioButtons:

<RadioGroup
            android:id="@+id/radioGroupLeakTight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

  <RadioButton
               android:text="@string/action_yes"
               android:id="@+id/radioLeakTightYes"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>

  <RadioButton
               android:text="@string/action_no"
               android:id="@+id/radioLeakTightNo"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"/>

</RadioGroup>

使用下面的代码,我尝试通过代码切换其中一个RadioButtons:

radioGroupLeakTight.check((currentTask.isLeakTight() ? R.id.radioLeakTightYes : R.id.radioLeakTightNo));

如果我不使用上面的代码,RadioButtons按预期工作:每当检查一个,另一个得到取消选中。如果我使用代码预先检查其中一个RadioButton,则此功能会丢失。每当我尝试检查RadioButton时,另一个仍然被检查。

我已阅读解决方案,我应该实施“OnCheckedChangeListener”并自行切换。但我想这只是掩盖其他不起作用的东西,不是吗?我也读过那些有这些问题的人,但他们让RadioGroup失踪了,我明显知道了。

我做错了什么?是唯一真正实现“OnCheckedChangeListener”并自己切换其他RadioButton的解决方案吗?

更新08/12/2016:

所以我继续搜索并实施了“OnCheckedChanged”。我现在看到的是,每当我检查一个RadioButtons时,这个事件永远不会被触发。侦听器设置在2个RadioGroups上。 我开始怀疑这些RadioButtons失去了RadioGroup的会员资格?每当我通过代码检查它们(在我设置我的监听器之后),事件就会成功触发。

1 个答案:

答案 0 :(得分:2)

对RadioGroups使用clearCheck()Learn more。 如果你需要检查另一个RadioButton,你可以在此之后这样做。

  

每当我尝试检查RadioButton时,另一个仍然会被检查。

RadioButton radioLeakTightYes = (RadioButton) findViewById(...);
RadioButton radioLeakTightNo = (RadioButton) findViewById(...);

radioGroupLeakTight.clearCheck();
if(currentTask.isLeakTight()){
    radioGroupLeakTight.check(radioLeakTightYes.getId());
} else {
    radioGroupLeakTight.check(radioLeakTightNo.getId());
}