当我点击同一个RadioGroup中的其他RadioButton时,我无法取消选中以下动态生成的RadioButtons。
我甚至使用自己的处理程序来清除RadioGroup(下面),并尝试了另一个使所有RadioButtons .setChecked(false),但这仍然没有清除我在PopulateAccessPoints中设置的RadioButton。
有什么想法吗?
RelativeLayout rlaAccessPoints;
RadioGroup rg;
public void onRadioButtonClicked(View view) {
// Is the button now checked?
RadioButton rd = (RadioButton)view;
rg.clearCheck();
rd.setChecked(true);
}
private void PopulateAccessPoints(List<clsAccessPoint> accessPoints){
rg = new RadioGroup(this);
for (clsAccessPoint acp : accessPoints) {
RadioButton rd = new RadioButton(this);
rd.setText(acp.ID + ": " + acp.Name);
rd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onRadioButtonClicked(v);
}
});
rg.addView(rd);
}
rlaAccessPoints.addView(rg);
for (int i = 0; i <= rg.getChildCount() - 1; i++){
RadioButton rd = new RadioButton(this);
rd = (RadioButton)rg.getChildAt(i);
String rdText = rd.getText().toString();
int colonPos = rdText.indexOf(":");
rdText = rdText.substring(0, colonPos).toString();
if (Settings.AccessPointID.equals(rdText)){
//rg.check(i);
rd.setChecked(true);
}
}
}
编辑:我在下面发布了一个更简洁的代码答案;请看一下。
答案 0 :(得分:2)
经过一个小时的努力,我找到了解决方法。
将RadioButton添加到RadioGroup后,检查它。
科特林的解决方案-
val rb = layoutInflater.inflate(R.layout.custom_radiobutton, null) as RadioButton
rb.text = label
rb.isChecked = false
radioGroup.addView(rb)
if(selected) rb.isChecked = true
答案 1 :(得分:0)
问题是你做两次事。 如果您已有一个处理切换和取消选择其他人的无线电组。你不要单独操作无线电按钮。
请阅读RadioGroup文档并实施适当的监听器
RadioButton rd = new RadioButton(this); rd =(RadioButton)rg.getChildAt(i);
这没有任何意义,首先创建一个按钮,然后将其重新分配给RG的孩子。
RadioButton rd = (RadioButton)rg.getChildAt(i);
应该是正确的表格。
你应该在radiogroup上实现这个监听器:http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
忘了这部分
rd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onRadioButtonClicked(v);
}
});
答案 2 :(得分:0)
我为解决这个问题而添加的代码让所有人感到困惑;遗憾。
原始代码是:
RelativeLayout rlaAccessPoints;
RadioGroup rg;
private void PopulateAccessPoints(List<clsAccessPoint> accessPoints){
rg = new RadioGroup(this);
for (clsAccessPoint acp : accessPoints) {
RadioButton rd = new RadioButton(this);
rd.setText(acp.ID + ": " + acp.Name);
rg.addView(rd);
if (Settings.AccessPointID.equals(acp.ID)){
rd.setChecked(true);
}
}
rlaAccessPoints.addView(rg);
}
这显示了相同的错误行为(当我点击同一个RadioGroup中的另一个时,我以编程方式设置的RadioButton没有设置。)
请参考此代码。这是唯一适用的代码;没有自定义事件处理程序等。