2014-11-16 2 views

ответ

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

Попробуйте это!

+0

Хорошо, это не позволит мне восстановить чек. Он восстанавливает все правильно, но все утверждения внутри onCheckedChanged повторно вызываются. Ищете что-то, что отвечает только кликам. Не проверять изменения. – Slay

+0

Помогите мне понять, какое точное поведение вы хотите заархивировать с помощью кнопки переключения? button.setOnClickListener (...) - отлично подходит для SwitchCompact - так почему бы вам не использовать его? т.е. switchButton.setOnClickListener (новый View.OnClickListener() { @Override общественного недействительными OnClick (View вид) { если (switchButton.isChecked()) {// делать действия } еще { ... } } }); –

+0

'button.setOnClickListener (новый View.OnClickListener..' не отвечает на SwitchCompat. – Slay

2

вам нужно только это (setOnTouchListener ненужно):

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

Что делать, если ты u хотите проверить, что проверенное изменение произошло от пользовательского касания, а не программно или от привязки данных? Ваше заявление неверно. –