2016-10-19 3 views
1

J'ai 4 bouton à bascule avec dessinable spécifique et algoritm que l'envoi de sms à un numéro de téléphone spécifique, si le bouton bascule est cochée, il envoie ON, sinon, il envoie OFF.Comment déclencher un autre état de bouton avec un seul bouton sans exécuter leur propre algorithme?

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

Mais, si j'ai tant de bouton, il serait difficile de cliquer sur 1 par 1. Alors, je décide de faire 1 bouton qui pourrait déclencher tous. Donc, avec ce seul bouton, tous les autres boutons seront activés/désactivés directement.

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

Mon problème est, lorsque je clique sur le bouton de déclenchement, il a déclenché tous les autres que je programme à être, mais aussi envoyer des SMS.

J'ai besoin de déclencher d'autres avec ce seul bouton sans déclencher leur algorithme SMS. Je vous remercie si vous pouvez m'aider.

MISE À JOUR: J'ai ce fond XML (sélecteur) pour changer automatiquement l'image de fond dépend de l'état du bouton.

 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

je ne comprends pas votre question, vous avez dit que, vous devez déclencher tous les boutons avec un seul bouton, c'est ok. Mais votre demande à nouveau ne veut pas exécuter l'algorithme sms. Comment vous écrivez le code dans le "setOnCheckedChangeListener" alors il devrait exécuter. –

+0

Oui Monsieur, c'est mon problème, L'analogie simple est, j'ai 4 commutateurs pour allumer/éteindre la lampe chaque interrupteur. Mais, j'ai besoin d'un seul interrupteur pour déclencher 4 autres. Et je peux également le faire OFF 1 par 1 ou en utilisant l'interrupteur de déclenchement à OFF. Mais, j'ai besoin d'eux pour me SMS une fois en utilisant l'instruction SMS dans le commutateur de déclenchement. Remplacer les 4 autres instructions SMS –

Répondre

1

Vous changez t il a vérifié l'état des boutons et ces boutons ont setOnCheckedChangeListener qui écoutent les changements d'état vérifiés. Si vous ne voulez pas supprimer les méthodes sendSMS() dans le setOnCheckedChangeListener.

Lorsque vous souhaitez envoyer un SMS, ajoutez la méthode sendSMS() en modifiant l'état vérifié.

+0

Oui Monsieur, c'est mon but, mais Im débutant ici et encore confus pour le faire –

+0

Où placez-vous 'setOnCheckedChangeListener () 'méthodes de btnsms4, btnsms3, btnsms2, btnsms? Les placez-vous dans 'btnsms5.setOnCheckedChangeListener()'? –

+0

Non Monsieur, je les place au-dessus du btnsms5 –

0

Utilisez button.setEnable(true).
Il va changer l'état d'affichage du bouton.

++

class CustomButton extends Button { 
    public void setState(boolean isOn) { 
     offView.setVisibility(isOn ? INVISIBLE : VISIBLE); 
     onView.setVisibility(isOn ? INVISIBLE : VISIBLE); 
    } 
} 
+0

Cette méthode m'a fait désactiver le bouton, je n'ai pas besoin de le faire. J'ai juste besoin de changer l'état avec l'arrière-plan changé comme indicateur, pas pour le désactiver. Je dois tout activer/désactiver, mais je peux toujours le déclencher 1 par 1. Ne pas les désactiver –

+0

hmm puis créer une vue de bouton personnalisée qui peut changer sa disposition ON/OFF. –

+0

@BurhanuddinRabbani voulez-vous vérifier la réponse éditée? –

0

ÉDITÉ:

Peut-être que vous pouvez suivre cette solution

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

ajouter une seule variable pour gérer & vérifier befor envoyer des SMS

+0

Merci monsieur, mais votre réponse ne fait aucun changement. –

+0

@BurhanuddinRabbani as-tu essayé mon édition? – Sodiq

+0

Monsieur, je l'ai essayé. Mais, même avec mon code, il exécute toujours le SMS. J'ai juste besoin de remplacer chaque SMS de bouton avec ce bouton de déclenchement SMS. –

1

comme par je sais que la dernière fois que je l'ai fait le même genre de fonctionnalités en utilisant tableau ou liste de tableau, il fera la magie il suffit de regarder le code ci-dessous et faites votre logique ont une bonne journée :)

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 ++ ; 

    } 
0

J'ai enfin ce dont j'ai besoin. Mon code est une partie de l'application que l'envoi de SMS en tant que commande à l'Arduino, puis arduino traitera la commande et exécuter le relais pour activer/désactiver le relais.

Le code Arduino et le code de l'application Android sont similaires. Donc, je regarde mon code Arduino et je l'adapte à mon code Android. Cela a réglé mon problème. J'ai juste besoin d'ajouter 5ème état de bouton de bascule de Commencement à chaque autre bouton.

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

      } 
     } 
    }); 

Merci pour votre aide :)