我已经动态创建了checkbox.I想要选中复选框的Id。但我只获得最后一个复选框的Id。 例如。如果创建了5个复选框,则仅在单击时显示Id of 5th复选框。我想要所有5复选框的ID 这是我动态创建的复选框类。
private void getcheckbox()
{
int cnter;
linearMain = (LinearLayout) findViewById(R.id.linearLayout2);
alphabet = new LinkedHashMap<String, String>();
for (cnter = 0; cnter < str_arr;)
if (!optionsarray.get(cnter).isEmpty())
{
cnter++;
} else
break;
alphabet.put("1", Option_A_new);
alphabet.put("2", Option_B_new);
alphabet.put("3", Option_C_new);
alphabet.put("4", Option_D_new);
alphabet.put("5", Option_E_new);
alphabet.put("6", Option_F_new);
alphabet.put("7", Option_G_new);
alphabet.put("8", Option_H_new);
alphabet.put("9", Option_I_new);
alphabet.put("10", Option_J_new);
Set<?> set = alphabet.entrySet();
Iterator<?> i = set.iterator();
int cnt = 0;
while (cnt < cnter)
{
@SuppressWarnings("rawtypes")
final Map.Entry me = (Map.Entry) i.next();
checkBox = new CheckBox(this);
checkBox.setId(Integer.parseInt(me.getKey().toString()));
checkBox.setTextColor(getResources().getColor(R.color.black));
checkBox.setText(me.getValue().toString());
linearMain.addView(checkBox);
cnt++;
}
这是我检查选择的复选框Id
的另一个类
checkBox.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
int checkBoxId = ((CheckBox) v).getId();
switch(checkBoxId) {
case 1:
selectedcheckboxid ="A";
testAnswernew(selectedcheckboxid);
break;
case 2:
selectedcheckboxid = "B";
testAnswernew(selectedcheckboxid);
break;
case 3:
selectedcheckboxid = "C";
testAnswernew(selectedcheckboxid);
break;
case 4:
selectedcheckboxid = "D";
testAnswernew(selectedcheckboxid);
break;
case 5:
selectedcheckboxid = "E";
testAnswernew(selectedcheckboxid);
break;
case 6:
selectedcheckboxid = "F";
testAnswernew(selectedcheckboxid);
break;
case 7:
selectedcheckboxid = "G";
testAnswernew(selectedcheckboxid);
break;
case 8:
selectedcheckboxid = "H";
testAnswernew(selectedcheckboxid);
break;
case 9:
selectedcheckboxid = "I";
testAnswernew(selectedcheckboxid);
break;
case 10:
selectedcheckboxid = "J";
testAnswernew(selectedcheckboxid);
break;
default:
}
答案 0 :(得分:0)
问题是,你只是在最后添加的复选框中添加了一个clicklistener!因此,在while循环中为复选框添加一个监听器。
答案 1 :(得分:0)
使用buttonView放入内部循环和访问,如下所示:
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
System.out.println(isChecked);
System.out.println(buttonView.getText());
});
答案 2 :(得分:0)
当我们在父动态创建的线性布局的子复选框上应用“setOnClickListener”时,可以解决此问题。我已经使用“getLayoutInflater()”添加了复选框,并为每个复选框设置了ID。对于它,您可以看到下面的代码。
for (int i = 0; i < JAS.length(); i++) {
View child = getLayoutInflater().inflate(R.layout.return_child, null);
chk = (CheckBox) child.findViewById(R.id.Product);
chk.setText(c.optString("name"));
chk.setId(i);
ll.addView(child);
chk.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String chk = null;
chk = Integer.toString(v.getId());
if (((CheckBox) v).isChecked()) {
selchkboxlist.add(chk);
} else {
selchkboxlist.remove(chk);
}
}
});
}
这里的selchkboxlist是“List” 同如下:
列出selchkboxlist = new ArrayList();
现在点击按钮,您可以应用以下代码来访问所选复选框的ID。
ReturnProducts.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int p=0;p<selchkboxlist.size();p++){
String Length = selchkboxlist.get(p);
int ln = Integer.parseInt(Length);
Toast.makeText(ReturnOrders.this, ""+ln, Toast.LENGTH_LONG).show();
}
}
});