Skip to content

xeoh/CheckBoxGroup

Repository files navigation

Android CheckBoxGroup

version 1.0.1 API Level ≥9 API ≥2.3 API ≥9 MIT LICENSE javadoc

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.

Sample

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.

About

Android library for handling multiple checkbox

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages