【发布时间】:2014-08-01 07:32:10
【问题描述】:
在单选组中选择了两个按钮。
我不知道我哪里错了。请帮帮我。
final RadioGroup rg=new RadioGroup(Survay_MainActivity.this);
rg.clearCheck();
rg.setId(Integer.valueOf(entry1.getKey()));
Log.v("rg getid", "rg"+rg.getId());
for(int i =0;i<values.size();i++){
// Create Button
final RadioButton btn = new RadioButton(Survay_MainActivity.this);
btn.setId(i);
btn.setTextColor(Color.parseColor("#000000"));
btn.setBackgroundColor(Color.TRANSPARENT);
btn.setGravity(Gravity.LEFT);
btn.setText(values.get(i));
rg.addView(btn);
btn.setLayoutParams(params);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
JSONObject quesAns = new JSONObject();
String ans=btn.getText().toString().trim();
try {
quesAns.put(String.valueOf(rg.getId()), ans);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jsonarray.put(quesAns);
Log.v("jsonarray", "jsonarray"+jsonarray);
}
});
}
views.addView(rg);
1) 我在循环之外创建 RadioGroup。
2) 在for循环中向RadioGroup添加单选按钮
3) 当循环结束时,RadioGroup 被添加到 linerlayout。
【问题讨论】:
-
您每次都通过循环创建一个新按钮 - 因为您已将其声明为 final,您可以在 onClick 处理程序中访问它 - 但这很糟糕,因为您每次都在重新创建按钮 - btn 指的是最后一个创建的按钮,而不是您通过循环时创建的按钮。
-
entry1.getKey()的值是多少?
-
正如 simo 所提到的,您正在创建一个最终按钮,并以错误的方式访问它。
final实际上很有用,但不是在这种情况下 - 您将相同的按钮传递给onClick方法,所以最好使用那个按钮。接下来,您应该在 RadioGroup 上使用onCheckChangeListener,而不是在 RadioButton 上使用onclick。我不知道为什么有两个选中的按钮,但先尝试修复这两个问题。哦,这两组似乎都有相同的 ID。
标签: android android-radiogroup