2013-03-26 3 views
3

J'essaie de construire une application de test et j'utilise des boutons radio pour les choix A, B, C, D. J'essaie de calculer le résultat -> par exemple lorsque vous appuyez sur A incrément 1, lorsque vous appuyez sur B incrément 2 et ainsi de suite. J'utilisais Radio Group au début, mais j'ai compris que si l'utilisateur essayait de changer la réponse à sa question de A à B, le résultat incrémenté sera 3, pas 2 comme prévu. Donc, je suis passé à boutons radio et j'essaie le code suivant:Cliquez deux fois pour vérifier le bouton radio.

 rb1.setOnCheckedChangeListener(new 
     android.widget.CompoundButton.OnCheckedChangeListener(){ 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      i++; 
      if(rb2.isChecked()) 
      { 
       i--; 
       rb2.setChecked(false);     
      } 

     } 
      }); 

    rb2.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener(){ 


     @Override 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      i++; 

      if(rb1.isChecked()) 
      { 
       i--; 
       rb2.setChecked(false);       
      } 
     } 
      }); 

Et maintenant, le deuxième bouton radio ont à cliquer deux fois pour vérifier. Est-ce un bug et pourrait-il être réparé. J'ai besoin des boutons pour changer d'état après le premier clic. Toutes les idées et les conseils seront les bienvenus. Je vous remercie.

+0

Utilisez le commutateur pour savoir quel bouton radio est coché et en fonction de celui qui affecte la valeur. – VenomVendor

+0

J'ai essayé cela avec le groupe radio, mais il assignait toujours les deux valeurs. –

+0

J'ai peu de confusion à propos de votre question ..? Tout d'abord vous avez deux boutons radio A et B, lorsque vous appuyez sur A, vous voulez incrémenter le nombre de 1, et lorsque vous appuyez sur B vous voulez incrémenter le numéro 2 à droite ..? Quelle est l'utilisation de l'incrément lorsque vous l'utilisez pour une instance, c'est-à-dire une fois, parce que quand vous changez à 1 à 2 seulement 2 devraient incrémenter .. Il est assez déroutant pouvez-vous m'élaborer avec scénario – Pragnani

Répondre

1

Vous pouvez changer votre code pour utiliser une instruction switch (comme suggéré dans l'un des commentaires) mais si vous voulez continuer avec ce que vous avez, et répondre à votre question. Dans votre code pour rb2, vous dites que si rb1 est cochée, définissez rb2 sur false. Donc, si vous cliquez sur rb1 (et qu'il est maintenant coché/poussé) et que vous cliquez sur rb2 la première fois que vous le décochez, la deuxième fois il reste coché.

Donc si l'on votre style de codage et de la procédure:

public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
     i++; 

     if(rb1.isChecked()) 
     { 
      i--; 
      rb2.setChecked(false);       
     } 
    } 

devrait être:

public void onCheckedChanged(CompoundButton buttonView, 
      boolean isChecked) { 
     i++; 

     if(isChecked && rb1.isChecked()) 
     { 
      i--; 
      rb1.setChecked(false);       
     } 

     rb2.setChecked(isChecked); 
    } 

Faire un changement similaire à votre méthode RB1.

+0

il faut encore un deuxième clic pour être à nouveau Vérifié. D'abord, il décoche le rb1, et après le deuxième clic, rb2 est vérifié. Continue d'augmenter deux fois. Pourriez-vous me donner quelques indications sur la façon dont cela sera fait avec une déclaration de commutateur? –

+0

oh, c'est intéressant. Le "setChecked" appelle le "onCheckedChanged". Je n'ai pas compris que cela arriverait. Ainsi, lorsque vous cochez un bouton différent, il est "coché" puis vous forcez une décocher sur le bouton alternatif, qui à son tour décoche ce que vous venez de faire. Voir mes modifications. En ce qui concerne le passage à l'instruction switch, chacune de vos substitutions onCheckedChanged est la même, mais fonctionne sur un bouton différent. Vous pouvez activer le boutonView. – Dave

Questions connexes