【发布时间】:2016-04-19 08:46:22
【问题描述】:
我正在创建一个 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());
当我第一次运行应用程序时,每个复选框都正确显示,当我单击按钮获取复选框(选中/未选中)值时,它显示正确的结果,但是当我选中/取消选中任何一个复选框时并再次单击按钮以获取结果,仅更改最后一个复选框值。我错过了什么,我无法弄清楚。
【问题讨论】:
-
将标签属性添加到动态生成的复选框。然后通过该标签找到视图。