获取数组中已选中复选框的多个值

时间:2014-06-20 07:24:32

标签: android android-checkbox

我已经以编程方式创建了复选框。

这是我的代码:

            llmain = (LinearLayout) findViewById(R.id.linearLayoutMain);
            lLayout = new LinearLayout[b];
            for (int j = 0; j < b; j++) {
                int x = 0;
                x = x + (j * 5);
                lLayout[j] = new LinearLayout(CheckBoxdemo.this);
                lLayout[j].setLayoutParams(new LayoutParams(
                        LayoutParams.WRAP_CONTENT,
                        LayoutParams.WRAP_CONTENT));
                lLayout[j].setOrientation(LinearLayout.VERTICAL);
                llmain.addView(lLayout[j]);
                for (int i = x; i < x + 5; i++) {
                    if (x > a) {
                        break;
                    } else {
                        if (testArrayList.contains(idsplit[i])) {
                            cb = new CheckBox(CheckBoxdemo.this);
                            cb.setText(namesplit[i]);
                            cb.setId(i + 1);
                            cb.setChecked(true);
                            cb.setTextColor(Color.BLACK);
                            cb.setTextSize(12f);
                            cb.setButtonDrawable(R.drawable.checkbox);
                            cb.setPadding(35, 5, 25, 5);
                            cb.setTag(i + 1);
                            cb.setOnCheckedChangeListener(handleCheck(cb));
                            if ((count1.equals(1)) || (count1.equals(2))) {
                                cb.setEnabled(true);
                            } else {
                                cb.setEnabled(false);
                            }
                            lLayout[j].addView(cb);
                        } else {
                            cb = new CheckBox(CheckBoxdemo.this);
                            cb.setText(namesplit[i]);
                            cb.setId(i + 1);
                            cb.setTextColor(Color.BLACK);
                            cb.setTextSize(12f);
                            cb.setButtonDrawable(R.drawable.checkbox);
                            cb.setPadding(35, 5, 25, 5);
                            cb.setTag(i + 1);
                            cb.setOnCheckedChangeListener(handleCheck(cb));
                            if ((count1.equals(1)) || (count1.equals(2))) {
                                cb.setEnabled(true);
                            } else {
                                cb.setEnabled(false);
                            }
                            lLayout[j].addView(cb);
                        }
                    }
                }
            }
  • 现在我收到了数据库中15个复选框的值。

现在,所有复选框都未选中。如果我点击其中任何一个;然后我想只需点击一下按钮就可以将这5个选中的复选框的值全部放在一个数组中。

我该如何实现这个???????

4 个答案:

答案 0 :(得分:3)

XML布局

<LinearLayout
    android:id="@+id/checkbox_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
</LinearLayout>

动态添加复选框

 LinearLayout checkBocContainer=  (LinearLayout)findViewById(R.id.checkbox_container);
    for (int j = 0; j < 5; j++)
    {
      CheckBox checkBox = new CheckBox(this);
      checkBox.setText("Check Box " + String.valueOf(j));
      checkBox.setId(j);
      checkBocContainer.addView(checkBox);
    }

获取选中的复选框ID

 ArrayList<Integer> listOfSelectedCheckBoxId=new ArrayList();
LinearLayout checkBocContainer=(LinearLayout)findViewById(R.id.checkbox_container);
for (int i = 0; i < checkBocContainer.getChildCount(); i++) 
 {
  CheckBox checkbox = (CheckBox) checkBocContainer.getChildAt(0);
   if (checkbox.isChecked())
    {
     listOfSelectedCheckBoxId.add(checkbox .getId());
    }
 }

答案 1 :(得分:2)

首先,不要反复启动相同的CheckBox对象,而是创建Checkbox数组

  CheckBox[] cbs;

还要创建int变量数组(可以在这里使用Vector / ArrayList)

  ArrayList<Integer> selectedCheckboxes = new ArrayList<Integer>(); // here change Integer as per data type of Tag (by default its int)

在for循环之前,使用要在LinearLayout中添加的复选框数量初始化此数组

  cbs = new CheckBox[<<put size here>>];

现在进入for循环,初始化每个复选框

  cbs[<<put index variable here>>] = new CheckBox(CheckBoxdemo.this);

示例:

  cbs[i] = new CheckBox(CheckBoxdemo.this); //here i is iteration variable
  cbs[i].setText(namesplit[i]);
  cbs[i].setTag(i + 1);
  cbs[i].setId(i + 1);
  cbs[i].setChecked(true);
  cbs[i].setTextColor(Color.BLACK);
  cbs[i].setTextSize(12f);

在按钮运行循环的Click listener事件中,其大小为CheckBox数组,并检查是否选中了每个复选框。如果选中了复选框,则在我们创建的ArrayList中添加其TAG值

  for(int i = 0; i < cbs.lenght(); i++){
      if(cbs[i].isChecked()){
          selectedCheckboxes.add(cbs[i].getTag());
      }
  }

您将获得arraylist中所有选中复选框的值。

答案 2 :(得分:1)

您可以使用ArrayList。声明具有全局访问权限的ArrayList并初始化它。并在setOnCheckedChangeListener()中添加/删除数组中的复选框值。

<强> [编辑]

例如,我使用了您的代码,每次选中/取消选中时,列表都会更新。你只能看到&#34;已检查&#34;项目

enter image description here

[编辑2]

以下是您需要的代码:

cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked) {
        list.add("" + buttonView.getText().toString());
    } else {
        list.remove(list.indexOf(buttonView.getText().toString()));
    }
    String items = "";
    for (String item : list) {
        items += "" +item;
    }
    Log.i("", items);
}
});

答案 3 :(得分:1)

LinearLayout checkBoxContainerLayout= (Linearlayout)findViewById(R.id.checkbox_container);
ArrayList<String> al=new Arraylist(); 
for(int i=o;i< checkBoxContainerLayout.getChildCount();i++)
{
CheckBox checkbox=(CheckBox)checkBoxContainerLayout.getChildAt((0));
   if(checkbox.isChecked())
     {
      al.add(checkbox.getId());
     }
 }