我的程序在一个页面上有50多个复选框。 我需要检查选择了哪些方框。
我知道我可以这样做:
CheckBox cb1 = (CheckBox) findViewById(R.id.checkBox1);
CheckBox cb2 = (CheckBox) findViewById(R.id.checkBox2);
if (cb1.isChecked){
//get Checkbox name
}
if (cb2.isChecked){
//get Checkbox name
}
但是,如果我必须使用超过50个复选框,这需要一些时间。 他们是一种更快速的方法来检查选择了哪个?类似的东西:
int i;
for (i = 0; i<checkBox.length; i++){
CheckBox cb+i = (CheckBox) findViewById (R.id.checkBox+i);
if (cb+i.isChecked){
//get Checkbox name
}
}
也许还可以说:你可以选择多于1个复选框。 我希望你知道我的意思。
谢谢, Bigflow
答案 0 :(得分:1)
另一种解决方法可能是:
假设您在CheckBox
中添加了LinearLayout
,您可以在Java中获取LinearLayout
引用并获取子视图,如下所示:
LinearLayout layout= (LinearLayout)findViewById(R.id.checkbox_container);
ArrayList values = new ArrayList();
for(int i=0; i<layout.getChildCount(); i++)
{
View v = layout.getChildAt(i);
if(v instanceof CheckBox)
{
CheckBox cb = (CheckBox)v;
if(cb.isChecked())
values.add(cb.getText().toString());
}
}
答案 1 :(得分:0)
您可以从CheckBox制作一个数组,然后将每个代码添加到您的布局
CheckBox[] achecker = new CheckBox[50];
achercker[0] = new CheckBox(context);
当您不知道需要多少CheckBoxes时,或使用ArrayList会更好
ArrayList<CheckBox> lchecker = new ArrayList<CheckBox>();
lchecker.add(new CheckBox(context));
答案 2 :(得分:0)
为您的复选框设置一个监听器。checkbox1.setOnCheckChangedListener(this)
然后覆盖
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if ( isChecked ){
// to determine which checkbox use buttonView.getId();
}
}
答案 3 :(得分:0)
您可以尝试下面这个,按计数设置ID:
ArrayList<Boolean> booleanList = new ArrayList<Boolean>();
for(int counter=0; counter<50; counter++) {
booleanList.add(false);
CheckBox chkBox = new CheckBox(this);
chkBox.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1));
chkBox.setId(counter);
chkBox.setOnClickListener(chkBoxOnClickListener);
}
private OnClickListener chkBoxOnClickListener = new OnClickListener() {
@Override
public void onClick(View view) {
int chkboxID = ((CheckBox)view).getId();
chkBox = (CheckBox) findViewById(chkboxID);
if(chkBox.isChecked()) {
booleanList.set(chkBox, true);
}
}
}