2010-06-30 5 views
37

cuál sería la forma correcta de recibir y enviar un evento cuando se activa o desactiva una casilla de verificación. En C# podría simplemente hacer doble clic y todo el código estaría hecho para mí. pero en Android parece ser un poco más oscuro. Pensé en usar los manejadores de eventos táctiles, pero si el usuario tiene un teclado no detectará el cambio ya que no es táctil. Me imagino que Android debería tener un evento nativo para el cambio de estado de la casilla de verificación.¿Cómo recibir un evento en la casilla de verificación de Android? ¿Cambiar?

Respuesta

118
CheckBox repeatChkBx = (CheckBox) findViewById(R.id.repeat_checkbox); 
repeatChkBx.setOnCheckedChangeListener(new OnCheckedChangeListener() 
{ 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
    { 
     if (isChecked) 
     { 
      // perform logic 
     } 

    } 
}); 
+15

si bien esta es la respuesta correcta, tengo curiosidad por lo que sería el mejor enfoque cuando la casilla de verificación está dentro de un elemento ListView y el onCheckedChange se llama cada vez que el usuario se desplaza pasado. ¿Alguna manera de diferenciar cuándo es iniciado por el usuario y por la actualización de la lista de lista? – rmooney

+1

^¡este comentario de @Rmooney es oro! ¡Tuve un problema con el adaptador RecyclerView y cada vez que lo desplazaba se volvía loco llamando más de una vez! ¡Gracias! –

+0

En el adaptador, cuando establece el cambio de cheque para ese titular en particular. Primero elimine al oyente, cambie el valor y luego lea el oyente. Las casillas de verificación obligan a llamar al oyente, por lo que debe eliminarlo para establecer el valor sin que se desencadene. – Tatarize

4

Desde CheckBox (con el tiempo) se extiende Vista, se puede utilizar un OnClickListener estándar para detectar cuando la casilla de verificación está hecho aprovechado por el usuario (en oposición a los cambios ListView):

CheckBox repeatChkBx = (CheckBox) findViewById(R.id.repeat_checkbox); 
repeatChkBx.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     if (((CheckBox)v).isChecked()) { 
      // perform logic 
     } 
    } 
}); 
0

probar este

CheckBox checkbox=(CheckBox)findViewById(R.id.checkbox); 
checkbox.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View v) 
     { 
      if (checkbox.isChecked()) 
      { 
      //Perform action when you touch on checkbox and it change to selected state 
      } 
      else 
      { 
    //Perform action when you touch on checkbox and it change to unselected state 
      } 
     } 
    }); 
Cuestiones relacionadas