studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android checkbox oncheckedchanged android-checkbox

android - programacion - ¿Cómo hacer algo cuando un checkbox cambia de estado?



manual de programacion android pdf (3)

Este es mi código:

<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 se marca uno de estos y luego configurar los otros dos para que "deshabiliten", de modo que el usuario pueda seleccionar solo 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!


Creo que RadioButton sería más adecuado para tus 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 tu 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 lidiar con la desactivación de otras opciones. El usuario solo tendrá una opción para elegir de manera predeterminada.


Esta es la forma en que se le notifica sobre los cambios marcados:

CheckBox check = findViewById(R.id.sprint_checkbox); check.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { //do stuff } });

También puede permitir que su actividad implemente 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);

Anulando el 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; } }


@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 permitirlo con ID''s. Espero que funcione.