Android – cambia el estado de un switch de forma programática sin activar OnCheckChanged listener

Estoy buscando un método de cambiar mediante programación el estado de un widget conmutador de Android mediante switch.setChecked(true); Sin activar OnCheckedChangedlistener .

Mi primer pensamiento era intercambiarlo hacia fuera para un OnClickListener pero como esto registra solamente tecleos y usted puede no sólo chascar pero también deslizar un interruptor entonces no es realmente apto para el propósito como si el usuario fuera deslizar el interruptor de apagado a encendido Entonces el conmutador realmente no hará nada ya que el usuario no está haciendo clic en …

Si alguien tiene una solución o un trabajo inteligente alrededor de esto, que sería impresionante

5 Solutions collect form web for “Android – cambia el estado de un switch de forma programática sin activar OnCheckChanged listener”

Bueno, justo antes de hacer las cosas en el código con el interruptor que podría simplemente cancelar el registro del Listener, a continuación, hacer lo que sea necesario, y de nuevo registrar el oyente.

Tengo una solución y su funcionamiento muy bien en mi extremo. He agregado setOnTouchListener y setOnCheckedChangeListener en mi control de conmutador, y agregó el siguiente código para resolver mi problema.

  // set tag by default. mMySwitch.setTag("TAG"); // Add OnCheckedChangeListener. mMySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mMySwitch.getTag() != null) { mMySwitch.setTag(null); return; } // Do your stuff here. } }); // Add Touch listener. mMySwitch.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { mMySwitch.setTag(null); return false; } }); 

De esta manera setOnCheckedChangeListener se recibe sólo cuando el cheque cambiado sucede por la intervención humana por arrastre, por clic, por el tacto.

También no se olvide de añadir su etiqueta de cadena válida (no nulo) cuando su tratando de cambiar el estado de verificación de control de conmutador. me gusta :

  mMySwitch.setTag("TAG"); mMySwitch.setChecked(true); 

Establezca el oyente en null antes de llamar a la función setCheck () y habilítela después de eso, como por ejemplo:

 switch.setOnCheckedChangeListener (null); switch.setChecked(true); switch.setOnCheckedChangeListener (this); 

Referencia : Cambiar el valor de la casilla de verificación sin activar onCheckChanged

Elaborando la respuesta de Mahmoud

 CompoundButton.OnCheckedChangeListener switchListener; @Override protected void onCreate(Bundle savedInstanceState) { switchListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { //Implement on check change } }; switch.setOnCheckedChangeListener (switchListener); //When you want to trigger the checked of switch do the following switch.setOnCheckedChangeListener (null); switch.setChecked(true); switch.setOnCheckedChangeListener (switchListener); } 

Sólo tienes que añadir esto a tu código:

 activity.recreate(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.