1

我有一个带有切换按钮的类,定义如下:

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 时,我总是得到 if 的 Sending OFF 结果部分,即使在 xml 中切换按钮被声明为 false 并且按钮不会打开或关闭。

为什么会这样?

4

2 回答 2

3

ToggleButtons 和所有CompoundButton的 s 一样,在点击时会处理自己的选中状态。你OnClickListener正在抵消这种行为。相反,使用 aCompoundButton.OnCheckedChangeListener并检查boolean传入onCheckedChanged()的新状态。

于 2016-04-14T21:33:44.697 回答
3

我建议您在切换按钮上使用检查更改侦听器。

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 方法。

于 2016-04-14T21:54:09.450 回答