获取checkboxId动态创建的复选框?

时间:2014-11-19 12:51:58

标签: android dynamic checkbox android-checkbox

  

我已经动态创建了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:

        }

3 个答案:

答案 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();
        }

    }
});