2012-07-04 17 views
11

Este es mi código:¿Cómo hacer algo cuando un estado de cambio de casilla de verificación?

<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" /> 

Lo que quiero hacer es "detectar" cuando uno de ellos se comprueba a continuación, establezca los otros dos para "desactivar", por lo que el usuario puede seleccionar sólo uno a la vez. Intenté usar el ".setOnCheckedChangeListener", pero no puedo hacer eso, ¿alguien me puede ayudar con algún código? Muchas gracias chicos!

+0

"" Intenté usar el ".setOnCheckedChangeListener", pero no puedo hacer eso "" ¿por qué no puedes hacer eso? Código de lugar de su 'setOnCheckedChangeListener' –

+0

El oyente de cambio comprobado es la manera de hacer lo que está hablando. – matt5784

+2

por qué no usar un botón de opción. (es decir, grupo de radio). Esa es exactamente la razón por la que están hechos. El uso solo puede hacer una foto, no es necesario deshabilitar las otras dos. Y, por cierto, onCheckChangedListener también funciona con botones de radio. – drulabs

Respuesta

25

Esta es la forma en que se le notifique acerca de los cambios controladas:

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

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

     } 
    }); 

También puede dejar su actividad implementa la interfaz OnCheckedChangeListener y luego:

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); 

Sustitución del método de interfaz:

@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; 

      } 

} 
+0

¡Muchas gracias! – hyperloris

+1

Gracias. su código sopló mi problema al obtener valores booleanos de la casilla de verificación. – BK19

1

Creo que un RadioButton sería más adecuado para sus objetivos.

<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> 

Luego en el código:

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

En este caso, no tendrá que hacer frente a la desactivación otras opciones. El usuario solo tendrá una opción para elegir de manera predeterminada.

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 
      ... 
     } 
    } 
} 

Esto debería permitirte con ID. Espero que funcione.

Cuestiones relacionadas