2014-11-16 23 views

risposta

35
static Boolean isTouched = false; 

switchButton.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       isTouched = true; 
       return false; 
      } 
     }); 

switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      if (isTouched) { 
       isTouched = false; 
       if (isChecked) { 
       } 
       else { 
       } 
      } 
     } 
    }); 

Prova questo!

+0

Okay, questo non mi permette di ripristinare il controllo. Ripristina tutto, ma tutte le istruzioni all'interno di onCheckedChanged vengono richiamate. Alla ricerca di qualcosa che risponde solo ai clic. Non controllare le modifiche. – Slay

+0

Aiutami a capire, quale comportamento esatto vuoi archiviare dal pulsante di attivazione/disattivazione? button.setOnClickListener (...) - va bene per SwitchCompact - quindi perché non vuoi usarlo? cioè switchButton.setOnClickListener (nuova View.OnClickListener() { @Override public void onClick (Panorama vista) { se (switchButton.isChecked()) {// fare azione } else { ... } } }); –

+0

'button.setOnClickListener (nuovo View.OnClickListener..' non risponde a SwitchCompat. – Slay

2

è necessario solo che questa (la setOnTouchListener è inutile):

switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 

       if (isChecked) { 
        //if 'isChecked' is true do whatever you need... 
       } 
       else { 
       } 
      } 
     } 
    }); 
+1

E se tu vuoi controllare che il check modificato sia venuto da un utente touch e non programmaticamente o da un'associazione dati? La tua affermazione è errata. –

Problemi correlati