如何在不执行自己的算法的情况下用单个按钮触发其他按钮状态?

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

            }
        }
    });

谢谢你的帮助:)