Android动态生成的单选按钮一旦以编程方式设置后就不会取消选中

问题描述 投票:2回答:3

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

[我什至诉诸编写自己的清除RadioGroup的处理程序(下面),并尝试了另一个使所有RadioButtons为.setChecked(false)的处理程序,但这仍然不能清除我在PopulateAccessPoints中setChecked的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);
    }
}

}

编辑:我在下面发布了一个答案,其中包含更简洁的代码;请改为查看。

android android-radiogroup android-radiobutton
3个回答
0
投票

问题是您做两次事情。如果您已经有一个广播组可以处理切换和取消选择其他组。您不能单独操作单选按钮。

请阅读RadioGroup文档并实现适当的侦听器

RadioButton rd =新的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);
    }
});

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未被取消。)>

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.