3

当我单击同一 RadioGroup 中的其他 RadioButton 时,我无法取消选中以下动态生成的 RadioButton。

我什至求助于编写我自己的清除 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);
    }
}

}

编辑:我在下面发布了一个更简洁的代码的答案;请看那个。

4

3 回答 3

2

经过一个小时的努力,我找到了解决方案。

将 RadioButton 添加到 RadioGroup 后检查它。

Kotlin 中的解决方案 -

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
于 2020-04-13T03:03:14.710 回答
0

问题是你做了两次事情。如果您已经有一个无线电组来处理切换和取消选择其他人。您不会单独对单选按钮进行操作。

请阅读 RadioGroup 文档并实现正确的监听器

RadioButton rd = new RadioButton(this); rd = (RadioButton)rg.getChildAt(i);

这是没有意义的,首先您创建一个按钮,然后将其重新分配给 RG 的子项。

RadioButton rd = (RadioButton)rg.getChildAt(i);

应该是正确的形式。

你应该在无线电组上实现这个监听器:http: //developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html

忘记这部分

 rd.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        onRadioButtonClicked(v);
    }
});
于 2014-08-20T14:15:01.460 回答
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 没有被取消设置)。

请改为参考此代码。这是唯一适用的代码;没有自定义事件处理程序等。

于 2014-08-21T08:55:59.927 回答