我的应用程序中有很多复选框,我发现检查每个项目是否被选中很不方便。因此,我想知道是否有一种方法可以只选中它,而忽略一堆未使用的复选框。
现在,我的想法是要做类似的事情
if (cb1.isChecked()) //do something
if (cb2.isChecked()) //do something
...
if (cb32.isChecked()) //do something
但是我发现检查每个复选框太多了。有没有办法只获得选定的?
示例
一个 CheckBoxGroup ,您可以执行类似checkBoxGroup.getCheckedItems()
我已经检查了几个库,但是这种方式行不通。 任何帮助将不胜感激,在此先感谢!干杯!
答案 0 :(得分:2)
您可以按照以下步骤操作:
1)首先获取所有复选框的父级的引用。 (它可能是任何布局类型的实例;例如find linearlayout。比如
LineartLayout parent = (LinearLayout)findViewById(R.id.linearlayout);
2)然后创建一个字符串值的数组列表;说
ArrayList<String> checkedList = new ArrayList();
3)然后运行for循环,如
for(int i=0; i<parent.getChildCount(); i++){
if(parent.getChildAt(i) instanceof CheckBox){
CheckBox checkBox = (CheckBox)parent.getChildAt(i);
if(checkBox.isChecked()){
checkedList.add(checkBox.getText());
}
}
}
4)在for循环的最后,您将获得检查值的列表。
答案 1 :(得分:2)
尝试为您拥有的所有复选框设置一个OnCheckedChangeListener
。喜欢
复选框1
CheckBox checkBox1 = findViewById(R.id.check_box1);
checkBox.setOnCheckedChangeListener(checkedChangeListener );
使用单个OnCheckedChangeListener
取消n个复选框:
CompoundButton.OnCheckedChangeListener checkedChangeListener = new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
switch (buttonView.getId())
{
case R.id.check_box1:
if (isChecked)
{
//logic 1
}
else
{
//logic 2
}
;
break;
}
}
};
处理所有带有in开关的复选框。
答案 2 :(得分:1)
我建议您创建复选框列表。然后使用For循环或Do While循环仅选中复选框创建新数组。 通过这种方式,在新列表中,您将仅获得选中的复选框
答案 3 :(得分:1)
使用此循环,以其名称查找复选框:
for (int i = 1; i <= 32; i++) {
int id = getResources().getIdentifier("cb" + i, "id", getPackageName());
CheckBox cb = findViewById(id);
if (cb.isChecked()) {
// your code
}
}
通过这种方式,您可以通过按钮的点击侦听器来获取所有已选中复选框的列表:
final ArrayList<CheckBox> checked = new ArrayList<CheckBox>();
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checked.clear();
for (int i = 1; i <= 32; i++) {
int id = getResources().getIdentifier("cb" + i, "id", getPackageName());
CheckBox cb = findViewById(id);
if (cb.isChecked()) {
checked.add(cb);
}
}
}
});
现在列表checked
仅包含选中的复选框。