动态添加复选框并在android

时间:2016-04-19 08:46:23

标签: android checkbox

我正在创建一个Android应用程序,其中有20个复选框可显示给用户进行多项选择。我已编程动态显示复选框,但问题是如何获取复选框值?到目前为止,我已尝试过这段代码。

我的全局变量是

ArrayList<MyCheckBox> listOfCheckedItem;
private int CHECKBOX_POSITION;

并且为了添加复选框,我做了类似的事情

listOfCheckedItem = new ArrayList<>();
        listOfCheckedItem.add(new MyCheckBox(true, "One")); //(isChecked,text)
        listOfCheckedItem.add(new MyCheckBox(false, "Two"));
        listOfCheckedItem.add(new MyCheckBox(true, "Three"));
        listOfCheckedItem.add(new MyCheckBox(false, "four"));
        listOfCheckedItem.add(new MyCheckBox(false, "five"));

        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        for (int i = 0; i < listOfCheckedItem.size(); i++) {
            CHECKBOX_POSITION = i;
            MyCheckBox myCheckBox = listOfCheckedItem.get(i);
            CheckBox checkBox = new CheckBox(this);
            checkBox.setChecked(myCheckBox.getIsChecked());
            checkBox.setText(myCheckBox.getText());
            selectCategoryLayout.addView(checkBox, params);
            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    listOfCheckedItem.get(CHECKBOX_POSITION).setIsChecked(isChecked);
                }
            });
        }

要获得复选框值,我确实喜欢这个

StringBuilder builder = new StringBuilder();
        for (int i = 0; i < listOfCheckedItem.size(); i++) {
            MyCheckBox mcb = listOfCheckedItem.get(i);
            builder.append("\nstatus: " + mcb.getText() + " is " + mcb.getIsChecked());
        }
        resultView.setText(builder.toString());

我第一次运行app时,每个复选框都会正确显示,当我点击按钮获取复选框(选中/取消选中)时,它会显示正确的结果,但是当我选中/取消选中任何一个复选框时然后再次单击按钮以获取结果,仅更改最后一个复选框值。我想念的是我无法理解的。

1 个答案:

答案 0 :(得分:0)

问题解决了, 而不是这样做

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    listOfCheckedItem.get(CHECKBOX_POSITION).setIsChecked(isChecked);// changed this line as below code
                }
            });

我确实喜欢这个

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    myCheckBox.setIsChecked(isChecked);//I changed this line and every thing worked fine
                }
            });