2016-04-14 4 views
0

Ich habe eine Klasse mit Umschaltflächen wie so definiert:Wipptaste Makeln nicht auf 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; 
} 
} 

, wenn ich die App und Toggle-b2 laufen, habe ich immer das Senden OFF Ergebnis ist Teil der, wenn, obwohl In der XML-Datei werden die Umschalttasten als false deklariert und die Schaltfläche wird nicht ein- oder ausgeschaltet.

Warum passiert das?

Antwort

2

ToggleButton s, wie alle CompoundButton s, kümmern sich beim Anklicken um ihren eigenen aktivierten Status. Ihr OnClickListener wirkt diesem Verhalten entgegen. Verwenden Sie stattdessen eine CompoundButton.OnCheckedChangeListener, und überprüfen Sie die boolean übergeben in onCheckedChanged() für den neuen Zustand.

+0

Großartig! erweiterte die richtige Klasse, implementierte Methode, ersetzte buttonView und kommentierte das manuelle Umschalten, das ich hatte. Das einzige Problem ist nun, dass sie laut xml als falsch beginnen sollten, aber beim ersten Antippen erhalte ich das Ergebnis "Sending OFF", was passiert, wenn die Bedingung b2.isChecked() wahr ist. – marciokoko

+0

Das klingt richtig für mich. Wenn der 'Button' als _off_ startet, wird der erste Klick ihn auf _on_ (' isChecked() = true') umschalten, so dass Ihr 'if' Block ausgeführt wird. Die Methode 'onCheckedChanged()' wird ausgelöst, nachdem sich der Status geändert hat. Daher müssen Sie möglicherweise Ihre Logik mit dem 'OnClickListener' umdrehen. –

2

Ich würde empfehlen, dass Sie den Check geändert Listener auf Ihre Umschaltflächen verwenden.

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

Mit nicht Ihre XML gesehen zu haben, es klingt wie die onClick Methode wird auch nicht aufgerufen wird, wenn Sie auf den Button klicken.

Verwandte Themen