CheckBoxGroup
CheckBoxGroup copied to clipboard
Android library for handling multiple checkbox
Android CheckBoxGroup
Introduction
CheckBoxGroup provides easy handling of multiple "CheckBox". Don't use switch, if, or multiple listeners for handling CheckBox. Instead, group all CheckBox with CheckBoxGroup.

Requirements
Android API ≥ 2.3 (API Level 9)
Gradle
You can import CheckBoxGroup from jcenter.
repositories {
jcenter()
}
dependencies {
compile 'com.xeoh.android:checkboxgroup:1.0.1'
}
Don't: Traditional way to use CheckBoxes as options
We need to deal with every CheckBox when one changes.
public class MainActivity extends AppCompatActivity {
private ArrayList<String> options = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CheckBox option1Btn = (CheckBox) findViewById(R.id.option1);
CheckBox option2Btn = (CheckBox) findViewById(R.id.option2);
CheckBox option3Btn = (CheckBox) findViewById(R.id.option3);
CheckBox option4Btn = (CheckBox) findViewById(R.id.option4);
CheckBox option5Btn = (CheckBox) findViewById(R.id.option5);
options.add("option1");
options.add("option2");
options.add("option3");
options.add("option4");
options.add("option5");
option1Btn.setOnCheckedChangeListener(onCheckedChangeListener);
option2Btn.setOnCheckedChangeListener(onCheckedChangeListener);
option3Btn.setOnCheckedChangeListener(onCheckedChangeListener);
option4Btn.setOnCheckedChangeListener(onCheckedChangeListener);
option5Btn.setOnCheckedChangeListener(onCheckedChangeListener);
}
private CheckBox.OnCheckedChangeListener onCheckedChangeListener
= new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.option1:
if (isChecked) options.add("options1");
else options.remove("options1");
break;
case R.id.option2:
if (isChecked) options.add("options2");
else options.remove("options2");
break;
case R.id.option3:
if (isChecked) options.add("options3");
else options.remove("options3");
break;
case R.id.option4:
if (isChecked) options.add("options4");
else options.remove("options4");
break;
case R.id.option5:
if (isChecked) options.add("options5");
else options.remove("options5");
break;
}
}
Toast.makeText(MainActivity.this,
options.toString(),
Toast.LENGTH_LONG).show();
};
}
Do: Now deal with multiple checkboxes with one class
You can deal with multiple CheckBoxes with CheckBoxGroup.
Map your checkBoxes to any value. CheckBoxGroup gives mapped value for all
selected checkBoxes.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HashMap<CheckBox, String> checkBoxMap = new HashMap<>();
checkBoxMap.put((CheckBox) findViewById(R.id.option1), "Option1");
checkBoxMap.put((CheckBox) findViewById(R.id.option2), "Option2");
checkBoxMap.put((CheckBox) findViewById(R.id.option3), "Option3");
checkBoxMap.put((CheckBox) findViewById(R.id.option4), "Option4");
checkBoxMap.put((CheckBox) findViewById(R.id.option5), "Option5");
CheckBoxGroup<String> checkBoxGroup = new CheckBoxGroup<>(checkBoxMap,
new CheckBoxGroup.CheckedChangeListener<String>() {
@Override
public void onOptionChange(ArrayList<String> options) {
Toast.makeText(MainActivity.this,
options.toString(),
Toast.LENGTH_LONG).show();
}
});
}
// Becareful. CheckBoxGroup sets onCheckedChangeListener of checkboxes
// internally. If you need identical listeners for each checkboxes implement
// that algorithm with CheckBox.OnClick
}
More Usage
// set option1 and 2 checked, 3,4, and 5 unchecked
checkBoxGroup.setValues(Arrays.asList("Option1", "Option2"));
// get entire checkbox values as ArrayList
ArrayList<String> selectedValues = checkBoxGroup.getValues();
// add option6 and make it checked
checkBoxGroup.add((CheckBox) findViewById(R.id.option6), "Option6", true);
// remove option6
checkBoxGroup.add((CheckBox) findViewById(R.id.option6));
// toggle option5's check value
checkBoxGroup.toggleCheckBox("Option5");
See more on Sample Application and JavaDoc
License
CheckBoxGroup is available under the MIT license. See the LICENSE file for more info.