0

我有一个程序在一页上有 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

4

4 回答 4

1

另一种解决方法可能是:

假设你已经添加CheckBoxLinearLayout,你可以LinearLayout在 Java 中获取引用并获取子视图,如下所示:

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());
    }
}
于 2012-05-04T07:31:03.843 回答
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));
于 2012-05-04T07:28:47.147 回答
0

为您的复选框设置一个侦听器。checkbox1.setOnCheckChangedListener(this)然后覆盖

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
if ( isChecked ){
            // to determine which checkbox use buttonView.getId();
        }
}
于 2012-05-04T07:30:26.073 回答
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);
            }

        }
}
于 2012-05-04T07:36:39.640 回答