我有4个切换按钮,具有特定的绘图和算法,可以将短信发送到特定的电话号码,如果选中切换按钮,则发送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");
}
}
});
但是,如果我有这么多按钮,则很难单击1乘1.因此,我决定制作一个可以触发所有按钮的按钮。因此,使用此单个按钮,所有其他按钮的状态将直接打开/关闭。
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"
答案 0 :(得分:1)
据我所知,上次我使用数组或数组列表执行相同类型的功能时,只需查看下面的代码即可实现神奇,让您的逻辑度过美好的一天:)
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 ++ ;
}
答案 1 :(得分:0)
使用button.setEnable(true)
。
它将改变按钮的视图状态。
++
class CustomButton extends Button {
public void setState(boolean isOn) {
offView.setVisibility(isOn ? INVISIBLE : VISIBLE);
onView.setVisibility(isOn ? INVISIBLE : VISIBLE);
}
}
答案 2 :(得分:0)
<强>编辑:强>
也许你可以按照这个解决方案
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;
}
});
}
只需添加一个变量来处理它&amp;检查发送短信
答案 3 :(得分:0)
您正在更改按钮的已检查状态,这些按钮具有setOnCheckedChangeListener
,可以监听已检查的状态更改。如果您不希望删除sendSMS()
中的setOnCheckedChangeListener
方法。
如果您想发送短信,请添加sendSMS()
方法以及更改已选中状态。
答案 4 :(得分:0)
最后我得到了我需要的东西。 我的代码是应用程序的一部分,它将SMS作为命令发送到Arduino,然后arduino将获取命令并执行继电器以打开/关闭继电器。
Arduino代码和Android App代码类似。所以,我看看我的Arduino代码,并将其改编为我的Android代码。这解决了我的问题。我只需要将commparation第五个切换按钮状态添加到另一个按钮。
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");
}
}
});
谢谢你的帮助:)