0

我正在创建一个RadioButtons 的数字(计数)。我不能使用RadioGroup,因为我需要 1 RadioButton,旁边的 a Button,在每个TableRow。然而,与所有RadioButtons 一样,一次只能选择一个。我想我可以设置 id 并在 上阅读它onCheckedChanged以更改所有内容,但您单击的那个为 false。

rb = new RadioButton[count];

For-loop....
     rb[i]  = new RadioButton(this);
     rb[i].setId(5000 + i);
     rb[i].setOnCheckedChangeListener(this);

onCheckedChanged

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
{       
    for (int i = 0; i < count; i++)
    {
        if (buttonView.getId() == 5000 + i)
        {
            // Its the one
        }
        else
        {
            // Its not the one
            RadioButton rb = (RadioButton) findViewById((5000 + count));
            rb.setChecked(false);
        }
    }
}

我确实抓住了正确RadioButton的 s,但是当我尝试它时,.setChecked(false)它给了我一个NullPointerException,我不知道为什么。

4

2 回答 2

1

您正在为RadioButtonsfrom 5000to设置 id 5000 + (count - 1)RadioButton数组的大小为,count但 id 为直到,count - 1因为您从0(?!?) 开始循环)。在该else子句中,您查找布局中不存在RadioButton的 id ,因此您最终得到一个空引用。5000 + count

编辑 :

模拟 a 的代码RadioGroup应该是这样的:

for循环中,您是否构建了RadioButtons

rb[i].setOnCheckedChangeListener(checkListener);
//...

checkListener侦听器实例在哪里:

private OnCheckedChangeListener checkListener = new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            for (int i = 0; i < count; i++) {
                if (buttonView.getId() == 5000 + i) {
                    Log.e("XXX", "Position " + i);
                } else {                                       
                    RadioButton rb = (RadioButton) findViewById((5000 + i));
                    rb.setOnCheckedChangeListener(null);
                    rb.setChecked(false);
                    rb.setOnCheckedChangeListener(checkListener);
                }
            }
        }
    };
于 2012-07-31T12:56:39.050 回答
0

这向您显示 NullPointerException,因为它没有获取已检查 RadioButton 的 id。而不是使用 isCheked() 方法来检查天气单选按钮是否已选中。试试这个

  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
 {       
    for (int i = 0; i < count; i++)
  {
    if (buttonView.isChecked())
    {
        // perform your task here
    }
    else
    {
        // Do something here.........
    }
}

}

希望这可以帮助 :)

于 2012-07-31T12:59:32.403 回答