How to do something when a checkbox change state?
Asked Answered
C

3

13

This is my code:

    <CheckBox
        android:id="@+id/sprint_checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/sprint_game" />

    <CheckBox
        android:id="@+id/marathon_checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/marathon" />

    <CheckBox
        android:id="@+id/never_ending_checkbox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/never_ending" />

What i want to do is "detect" when one of these is checked and then set the other two to "disable", so the user can select only one at time. I tried to use the ".setOnCheckedChangeListener", but i can't do that, can someone help me with some code? Thanks a lot guys!

Camlet answered 4/7, 2012 at 15:40 Comment(3)
""I tried to use the ".setOnCheckedChangeListener", but i can't do that"" why you can not do that? Place code of your setOnCheckedChangeListenerDoorkeeper
The checked change listener is the way to do what you are talking about.Shenashenan
why not use a radio button. (i.e. radio group). That is exactly why those are made. Use can only pic one, no need to disable the other two. And by the way onCheckChangedListener works on radio buttons too.Sucrose
S
29

This is the way you are notified about checked changes:

CheckBox check = findViewById(R.id.sprint_checkbox);
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //do stuff

        }
    });

You can also let your activity implements the OnCheckedChangeListener interface and then:

CheckBox check1 = findViewById(R.id.sprint_checkbox);
CheckBox check2 = findViewById(R.id.marathon_checkbox); 
CheckBox check3 = findViewById(R.id.never_ending_checkbox);

check1.setOnCheckedChangeListener(this);
check2.setOnCheckedChangeListener(this);
check3.setOnCheckedChangeListener(this);

Overriding the interface method:

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    switch(buttonView.getId()){
               case R.id.sprint_checkbox:
                 //do stuff
               break;
               case R.id.marathon_checkbox:
                 //do stuff
               break;
               case R.id.never_ending_checkbox:
                //do stuff
               break;

            }

}
Swahili answered 4/7, 2012 at 15:51 Comment(1)
Thank you. your code sovled my problem while getting boolean values from checkbox.Malfeasance
B
1

I believe a RadioButton would be more suitable for your aims.

<RadioGroup
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:id="@+id/radio_group1">
    <RadioButton
        android:id="@+id/sprint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rad_option1"
        android:checked="true"
    android:onClick="onRadioButtonClick"
        />
    <RadioButton
        android:id="@+id/marathon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rad_option2"
        android:onClick="onRadioButtonClick"
         />
    <RadioButton
        android:id="@+id/neverending"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/rad_option3"
        android:onClick="onRadioButtonClick"
         />
</RadioGroup>

Then in your code:

public void onRadioButtonClick(View v) {
    RadioButton button = (RadioButton) v;
    // DO YOUR THING HERE DEPENDING ON WHICH RADIOBUTTON IS PICKED
}

In this case, you won't have to deal with disabling other options. The user will have only one option to pick by default.

Bowfin answered 4/7, 2012 at 16:53 Comment(0)
G
1
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    int id = buttonView.getId();

    if(isChecked){
       switch(id){
          case R.id.sprint:
          //add to database
          ...
       }
    }
    else{
      switch(id){
          case R.id.sprint:
          //remove from database
          ...
       }
   }
}

This should allow you to with ID's. Hope it works.

Gunplay answered 8/6, 2016 at 19:5 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.