我已经以编程方式创建了复选框。
这是我的代码:
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);
}
}
}
}
现在,所有复选框都未选中。如果我点击其中任何一个;然后我想只需点击一下按钮就可以将这5个选中的复选框的值全部放在一个数组中。
我该如何实现这个???????
答案 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;项目
[编辑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());
}
}