我正在创建一个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时,每个复选框都会正确显示,当我点击按钮获取复选框(选中/取消选中)时,它会显示正确的结果,但是当我选中/取消选中任何一个复选框时然后再次单击按钮以获取结果,仅更改最后一个复选框值。我想念的是我无法理解的。
答案 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
}
});