2016-04-14 1 views
0

У меня есть класс с кнопками быстрого перехода, определенный следующим образом:кнопки Переключения не переключаясь на Android

public class DeviceControlActivity extends Activity implements View.OnClickListener 
private ToggleButton b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12; 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gatt_services_characteristics); 
b2 = (ToggleButton) findViewById(R.id.button2); 
     b2.setOnClickListener(this); // calling onClick() method 
     b2.setBackgroundColor(Color.GRAY); 
     b3 = (ToggleButton) findViewById(R.id.button3); 
     b3.setOnClickListener(this); 
     b3.setBackgroundColor(Color.GRAY); 

@Override 
    public void onClick(View v) { 
     // default method for handling onClick Events.. 
     switch (v.getId()) { 

      case R.id.button2: 
       // call writeCharacteristic but concatenate pin # 
       if (b2.isChecked()) { 
        b2.setChecked(false); 
        b2.setBackgroundColor(Color.GRAY); 
        // do code to send pin# with writeCharacteristic 
        String str = "Pin11,0" + "\n"; 
        Log.d(TAG, "Sending OFF result=" + str); 
        /*final byte[] tx = str.getBytes(); 
        if(mConnected) { 
         characteristicTX2.setValue(tx); 
         mBluetoothLeService.writeCharacteristic(characteristicTX2); 
         mBluetoothLeService.setCharacteristicNotification(characteristicRX2,true); 
        }*/ 
       } else if (!b2.isChecked()) { 
        b2.setChecked(true); 
        b2.setBackgroundColor(Color.BLUE); 
        // do code to send pin# with writeCharacteristic 
        String str = "Pin11,1" + "\n"; 
        Log.d(TAG, "Sending ON result=" + str); 
        /*final byte[] tx = str.getBytes(); 
        if(mConnected) { 
         characteristicTX2.setValue(tx); 
         mBluetoothLeService.writeCharacteristic(characteristicTX2); 
         mBluetoothLeService.setCharacteristicNotification(characteristicRX2, true); 
        }*/ 
       } 
       break; 
} 
} 

при запуске приложения и тумблер b2, я всегда получаю отправку результате части, если, несмотря на то, в xml кнопки переключения объявляются как ложные, и кнопка не включает или выключает.

Почему это происходит?

ответ

2

ToggleButton s, как и все CompoundButton s, позаботьтесь о своем собственном проверенном состоянии после нажатия. Ваш OnClickListener противодействует этому поведению. Вместо этого используйте CompoundButton.OnCheckedChangeListener и проверьте boolean на onCheckedChanged() для нового состояния.

+0

Отлично! расширил правый класс, реализовал метод, заменил buttonView и закомментировал ручной переключатель, который у меня был. Единственная проблема теперь в том, что они должны начинаться как ложные в соответствии с xml, но при первом нажатии я получаю результат Sending OFF, который происходит, когда условие b2.isChecked() истинно. – marciokoko

+0

Это звучит правильно для меня. Если 'Button' начинается с _off_, первый щелчок переключит его на _on_ (' isChecked() = true'), поэтому ваш блок 'if' будет выполнен. Метод onCheckedChanged() 'срабатывает после изменения состояния, поэтому вам может потребоваться перевернуть вашу логику из того, что вы имели с помощью функции OnClickListener. –

2

Я бы порекомендовал вам использовать прослушивание измененного прослушивателя на ваших переключателях.

ToggleButton b2 = (ToggleButton) findViewById(R.id.button2); 
b2.setBackgroundColor(Color.GRAY); 
b2.setOnCheckedChangeListener(new  CompoundButton.OnCheckedChangeListener() { 
    public void onCheckedChanged(CompoundButton buttonView, boolean  isChecked) { 
     if (isChecked) { 
      // The toggle is enabled 
      b2.setChecked(false); 
       b2.setBackgroundColor(Color.GRAY); 
       // do code to send pin# with writeCharacteristic 
       String str = "Pin11,0" + "\n"; 
       Log.d(TAG, "Sending OFF result=" + str); 
       /*final byte[] tx = str.getBytes(); 
       if(mConnected) { 
        characteristicTX2.setValue(tx); 
        mBluetoothLeService.writeCharacteristic(characteristicTX2); 
        mBluetoothLeService.setCharacteristicNotification(characteristicRX2,true); 
       }*/ 
     } else { 
      // The toggle is disabled 
     } 
    } 
}); 

С не видев ваш XML, это звучит как метод OnClick также не вызывается при нажатии на кнопку.

 Смежные вопросы

  • Нет связанных вопросов^_^