切换按钮未开启 Android
Toggle button not toggling on Android
我有一个 class,切换按钮定义如下:
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 的发送关闭结果部分,即使在 xml 中切换按钮被声明为 false 并且按钮没有打开或关闭。
为什么会这样?
ToggleButton
s 和所有 CompoundButton
s 一样,在单击时处理它们自己的选中状态。你的 OnClickListener
正在抵消这种行为。相反,使用 CompoundButton.OnCheckedChangeListener
,并检查传入 onCheckedChanged()
的 boolean
以获得新状态。
我建议您在切换按钮上使用检查更改的侦听器。
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 方法。
我有一个 class,切换按钮定义如下:
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 的发送关闭结果部分,即使在 xml 中切换按钮被声明为 false 并且按钮没有打开或关闭。
为什么会这样?
ToggleButton
s 和所有 CompoundButton
s 一样,在单击时处理它们自己的选中状态。你的 OnClickListener
正在抵消这种行为。相反,使用 CompoundButton.OnCheckedChangeListener
,并检查传入 onCheckedChanged()
的 boolean
以获得新状态。
我建议您在切换按钮上使用检查更改的侦听器。
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 方法。