如何在不执行自己的算法的情况下用单个按钮触发其他按钮状态?
How to trigger other button state with single button without execute their own algorithm?
我有 4 个切换按钮,带有特定的可绘制对象和算法,可以将短信发送到特定的 phone 号码,如果选中切换按钮,它会发送 ON,否则,它会发送 OFF。
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
} else {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
}
});
btnsms2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay2on");
textsms2.setText("2 MURUB");
} else {
sendSMS("+6285800486251", "relay2off");
textsms2.setText("2 MATI");
}
}
});
btnsms3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay3on");
textsms3.setText("3 MURUB");
} else {
sendSMS("+6285800486251", "relay3off");
textsms3.setText("3 MATI");
}
}
});
btnsms4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay4on");
textsms4.setText("4 MURUB");
} else {
sendSMS("+6285800486251", "relay4off");
textsms4.setText("4 MATI");
}
}
});
但是,如果我有这么多按钮,很难一个一个地点击。所以,我决定做一个可以触发所有按钮的按钮。因此,使用这个单个按钮,所有其他按钮的状态将直接 ON/OFF。
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
textsms5.setText("ALL MURUB");
btnsms.setChecked(true);
btnsms2.setChecked(true);
btnsms3.setChecked(true);
btnsms4.setChecked(true);
} else {
sendSMS("+6285800486251", "semuaoff");
textsms5.setText("ALL MATI");
btnsms.setChecked(false);
btnsms2.setChecked(false);
btnsms3.setChecked(false);
btnsms4.setChecked(false);
}
}
});
我的问题是,当我点击“触发”按钮时,它触发了我编程的所有其他按钮,但它也发送短信。
我需要用这个按钮触发其他人而不触发他们的 SMS 算法。
如果你能帮助我,我会感谢你。
更新:
我有这个背景XML(选择器)根据按钮的状态自动更改背景图像。
item android:drawable="@drawable/ic_lamp_icon_on" android:state_checked="true"
item android:drawable="@drawable/ic_lamp_icon_off" android:state_checked="false"
使用button.setEnable(true)
.
它将改变按钮的视图状态。
++
class CustomButton extends Button {
public void setState(boolean isOn) {
offView.setVisibility(isOn ? INVISIBLE : VISIBLE);
onView.setVisibility(isOn ? INVISIBLE : VISIBLE);
}
}
已编辑:
也许你可以按照这个解决方案
final boolean[] isOnlyUpdate = {false};
//For button 1,2,3,4 add if (!isOnlyUpdate[0]) {} to make selection
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isOnlyUpdate[0]) {
if (isChecked) {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
} else {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
}
}
});
//for button 2,3,4 can follow button 1
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
isOnlyUpdate[0] = true;
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
textsms5.setText("ALL MURUB");
} else {
sendSMS("+6285800486251", "semuaoff");
textsms5.setText("ALL MATI");
}
btnsms.setChecked(isChecked);
btnsms2.setChecked(isChecked);
btnsms3.setChecked(isChecked);
btnsms4.setChecked(isChecked);
isOnlyUpdate[0] =false;
}
});
}
只需添加一个变量来处理它并在发送短信前检查它
您正在更改按钮的选中状态,并且这些按钮具有 setOnCheckedChangeListener
来侦听选中状态的更改。如果您不想删除 setOnCheckedChangeListener
.
中的 sendSMS()
方法
当您想发送短信时,请添加 sendSMS()
方法并更改选中状态。
据我所知,上次我使用数组或数组列表执行了相同类型的功能,只需看看下面的代码,它就会发挥神奇作用,让您的逻辑有一个美好的一天:)
ToggleButton toggleButton[] = new ToggleButton[3];
//access it using findViewbyid one by one
toggleButton[0] = (ToggleButton) findViewById(R.id.ToggleButton00);
toggleButton[1] = (ToggleButton) findViewById(R.id.ToggleButton01);
toggleButton[2] = (ToggleButton) findViewById(R.id.ToggleButton02);
toggleButton[3] = (ToggleButton) findViewById(R.id.ToggleButton03);
//below code for clickable event
int arrayindex = 0;
int viewcount = 0;
while (arrayindex < 3) {
View v = asyncLayout.getChildAt(viewcount);
if (yourclickableToggleposition) {
//no check
}else{
//all of your button will be checked instead of clickable
//button
toggleButton[arrayindex].setChecked(true);
arrayindex ++;
}
viewcount ++ ;
}
我终于得到了我需要的东西。
我的代码是将 SMS 作为命令发送到 Arduino 的应用程序的一部分,然后 arduino 将处理命令并执行继电器以打开 ON/OFF 继电器。
Arduino代码和AndroidApp代码类似。所以,我确实查看了我的 Arduino 代码并将其调整为我的 Android 代码。这解决了我的问题。我只需要将比较第 5 个切换按钮状态添加到每个其他按钮。
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms.setText("1 MURUB");
}else {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
else{
textsms.setText("1 MATI");
}
}
}
});
btnsms2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms2.setText("2 MURUB");
}else {
sendSMS("+6285800486251", "relay2on");
textsms2.setText("2 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay2off");
textsms2.setText("2 MATI");
}
else{
textsms2.setText("2 MATI");
}
}
}
});
btnsms3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms3.setText("3 MURUB");
}else {
sendSMS("+6285800486251", "relay3on");
textsms3.setText("3 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay3off");
textsms3.setText("3 MATI");
}
else{
textsms3.setText("3 MATI");
}
}
}
});
btnsms4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms4.setText("4 MURUB");
}else {
sendSMS("+6285800486251", "relay4on");
textsms4.setText("4 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay4off");
textsms4.setText("4 MATI");
}
else{
textsms4.setText("4 MATI");
}
}
}
});
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
btnsms.setChecked(true);
btnsms2.setChecked(true);
btnsms3.setChecked(true);
btnsms4.setChecked(true);
textsms5.setText("ALL MURUB");
} else {
sendSMS("+6285800486251", "semuaoff");
btnsms.setChecked(false);
btnsms2.setChecked(false);
btnsms3.setChecked(false);
btnsms4.setChecked(false);
textsms5.setText("ALL MATI");
}
}
});
谢谢你的帮助:)
我有 4 个切换按钮,带有特定的可绘制对象和算法,可以将短信发送到特定的 phone 号码,如果选中切换按钮,它会发送 ON,否则,它会发送 OFF。
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
} else {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
}
});
btnsms2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay2on");
textsms2.setText("2 MURUB");
} else {
sendSMS("+6285800486251", "relay2off");
textsms2.setText("2 MATI");
}
}
});
btnsms3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay3on");
textsms3.setText("3 MURUB");
} else {
sendSMS("+6285800486251", "relay3off");
textsms3.setText("3 MATI");
}
}
});
btnsms4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "relay4on");
textsms4.setText("4 MURUB");
} else {
sendSMS("+6285800486251", "relay4off");
textsms4.setText("4 MATI");
}
}
});
但是,如果我有这么多按钮,很难一个一个地点击。所以,我决定做一个可以触发所有按钮的按钮。因此,使用这个单个按钮,所有其他按钮的状态将直接 ON/OFF。
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
textsms5.setText("ALL MURUB");
btnsms.setChecked(true);
btnsms2.setChecked(true);
btnsms3.setChecked(true);
btnsms4.setChecked(true);
} else {
sendSMS("+6285800486251", "semuaoff");
textsms5.setText("ALL MATI");
btnsms.setChecked(false);
btnsms2.setChecked(false);
btnsms3.setChecked(false);
btnsms4.setChecked(false);
}
}
});
我的问题是,当我点击“触发”按钮时,它触发了我编程的所有其他按钮,但它也发送短信。
我需要用这个按钮触发其他人而不触发他们的 SMS 算法。 如果你能帮助我,我会感谢你。
更新: 我有这个背景XML(选择器)根据按钮的状态自动更改背景图像。
item android:drawable="@drawable/ic_lamp_icon_on" android:state_checked="true"
item android:drawable="@drawable/ic_lamp_icon_off" android:state_checked="false"
使用button.setEnable(true)
.
它将改变按钮的视图状态。
++
class CustomButton extends Button {
public void setState(boolean isOn) {
offView.setVisibility(isOn ? INVISIBLE : VISIBLE);
onView.setVisibility(isOn ? INVISIBLE : VISIBLE);
}
}
已编辑:
也许你可以按照这个解决方案
final boolean[] isOnlyUpdate = {false};
//For button 1,2,3,4 add if (!isOnlyUpdate[0]) {} to make selection
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isOnlyUpdate[0]) {
if (isChecked) {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
} else {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
}
}
});
//for button 2,3,4 can follow button 1
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
isOnlyUpdate[0] = true;
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
textsms5.setText("ALL MURUB");
} else {
sendSMS("+6285800486251", "semuaoff");
textsms5.setText("ALL MATI");
}
btnsms.setChecked(isChecked);
btnsms2.setChecked(isChecked);
btnsms3.setChecked(isChecked);
btnsms4.setChecked(isChecked);
isOnlyUpdate[0] =false;
}
});
}
只需添加一个变量来处理它并在发送短信前检查它
您正在更改按钮的选中状态,并且这些按钮具有 setOnCheckedChangeListener
来侦听选中状态的更改。如果您不想删除 setOnCheckedChangeListener
.
sendSMS()
方法
当您想发送短信时,请添加 sendSMS()
方法并更改选中状态。
据我所知,上次我使用数组或数组列表执行了相同类型的功能,只需看看下面的代码,它就会发挥神奇作用,让您的逻辑有一个美好的一天:)
ToggleButton toggleButton[] = new ToggleButton[3];
//access it using findViewbyid one by one
toggleButton[0] = (ToggleButton) findViewById(R.id.ToggleButton00);
toggleButton[1] = (ToggleButton) findViewById(R.id.ToggleButton01);
toggleButton[2] = (ToggleButton) findViewById(R.id.ToggleButton02);
toggleButton[3] = (ToggleButton) findViewById(R.id.ToggleButton03);
//below code for clickable event
int arrayindex = 0;
int viewcount = 0;
while (arrayindex < 3) {
View v = asyncLayout.getChildAt(viewcount);
if (yourclickableToggleposition) {
//no check
}else{
//all of your button will be checked instead of clickable
//button
toggleButton[arrayindex].setChecked(true);
arrayindex ++;
}
viewcount ++ ;
}
我终于得到了我需要的东西。 我的代码是将 SMS 作为命令发送到 Arduino 的应用程序的一部分,然后 arduino 将处理命令并执行继电器以打开 ON/OFF 继电器。
Arduino代码和AndroidApp代码类似。所以,我确实查看了我的 Arduino 代码并将其调整为我的 Android 代码。这解决了我的问题。我只需要将比较第 5 个切换按钮状态添加到每个其他按钮。
btnsms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms.setText("1 MURUB");
}else {
sendSMS("+6285800486251", "relay1on");
textsms.setText("1 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay1off");
textsms.setText("1 MATI");
}
else{
textsms.setText("1 MATI");
}
}
}
});
btnsms2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms2.setText("2 MURUB");
}else {
sendSMS("+6285800486251", "relay2on");
textsms2.setText("2 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay2off");
textsms2.setText("2 MATI");
}
else{
textsms2.setText("2 MATI");
}
}
}
});
btnsms3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms3.setText("3 MURUB");
}else {
sendSMS("+6285800486251", "relay3on");
textsms3.setText("3 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay3off");
textsms3.setText("3 MATI");
}
else{
textsms3.setText("3 MATI");
}
}
}
});
btnsms4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
if(btnsms5.isChecked()) {
textsms4.setText("4 MURUB");
}else {
sendSMS("+6285800486251", "relay4on");
textsms4.setText("4 MURUB");
}
} else {
if (btnsms5.isChecked()) {
sendSMS("+6285800486251", "relay4off");
textsms4.setText("4 MATI");
}
else{
textsms4.setText("4 MATI");
}
}
}
});
btnsms5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
sendSMS("+6285800486251", "semuaon");
btnsms.setChecked(true);
btnsms2.setChecked(true);
btnsms3.setChecked(true);
btnsms4.setChecked(true);
textsms5.setText("ALL MURUB");
} else {
sendSMS("+6285800486251", "semuaoff");
btnsms.setChecked(false);
btnsms2.setChecked(false);
btnsms3.setChecked(false);
btnsms4.setChecked(false);
textsms5.setText("ALL MATI");
}
}
});
谢谢你的帮助:)