2013-04-04 3 views
4

L'application est une application de séquenceur pas-à-pas avec 16 groupes radio avec 8 boutons dans chaque groupe. Cela fonctionne parfaitement, sauf quand un groupe a un bouton sélectionné, je ne peux pas l'éteindre, sauf si j'utilise le bouton d'effacement que j'ai créé pour effacer tous les radiogroupes. Ce que je voudrais ajouter est un code qui dit quand un bouton radio sélectionné est à nouveau sélectionné, il s'éteint simplement comme une bascule. J'ai essayé d'utiliser des bascules mais d'autres problèmes sont apparus avec cette méthode. Voici une tentative mais il est loin du compte Im devinerDésactivation d'un bouton radio

final RadioGroup radioGroup1 = (RadioGroup)findViewById(R.id.RadioGroup1); 
RadioButton lC1 = (RadioButton)findViewById(R.id.RadioButtonlowC1); 

Button D1 = (Button)findViewById(R.id.RadioButtonD1); 
     D1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       PdBase.sendFloat("D1", 74); 
       int selectedTypeId = radioGroup1.getCheckedRadioButtonId(); 
       RadioButton D1 = (RadioButton) findViewById(selectedTypeId); 
       if(radioGroup1 != null) // This will be null if none of the radio buttons are selected 
         radioGroup1.clearCheck(); 
       PdBase.sendFloat("D1", 0); 
      } 
     }); 

Répondre

1

Vous devez mettre le bouton dans un groupe de radio, puis désactivez le groupe. Un bouton radio ne peut pas être décoché directement, car l'idée est qu'une option dans un groupe est toujours vérifiée.

+0

Il est dans un groupe de radio désolé et j'ai un bouton qui efface tous les boutons, mais c'est pour tous les groupes de radio. En fait, je vais essayer d'utiliser ce code plus spécifiquement pour chaque groupe. –

+0

En fait cela ne fonctionnera pas pour moi car je dois pouvoir passer dans le radiogroupe à différents boutons –

+0

Étant donné le code complet ... Maintenant, lorsque l'application chargée, il sera réinitialisé et assurez-vous qu'aucun des boutons radio n'est sélectionné. Une fois l'application chargée dans mon système, je suis en mesure de sélectionner le fichier. –

1

Voici un exemple de création de radiogroupes, de radiobutton et d'utilisation en code Java. Je espère que ça vous donnera complète image

fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 


    <RadioGroup 
     android:id="@+id/maptype" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/line1" 
     android:orientation="horizontal" > 

     <RadioButton 
      android:id="@+id/map" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:checked="true" 
      android:drawableRight="@drawable/ic_launcher"/> 

     <RadioButton 
      android:id="@+id/satellite" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:drawableRight="@drawable/ic_launcher"/> 
    </RadioGroup> 

</LinearLayout> 

En code Java

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    RadioGroup rgrpMapType = (RadioGroup) findViewById(R.id.maptype); 
    int selectedTypeId = rgrpMapType.getCheckedRadioButtonId(); 
    RadioButton rbMapType = (RadioButton) findViewById(selectedTypeId); 
    if(rbMapType != null) // This will be null if none of the radio buttons are selected 
      rgrpMapType.clearCheck(); 
} 
+1

Après la ligne 3 dans le code Java ci-dessus, écrivez ce code. rbMapType sera null seulement si un bouton radio est sélectionné. J'espère que le code sera clair. if (rbMapType! = null) rgrpMapType.clearCheck(); –

+0

Merci pour la réponse mais il ne me laissera pas sélectionner les boutons radio quand j'implémente le code que vous m'avez donné c'est comme ça après avoir ajouté votre code –

+1

Impossible d'obtenir une correction donc je vais juste ajouter un bouton clair pour chaque groupe –

20

S'il vous plaît voir ma réponse à votre autre basically identical question, que je l'ai copié ci-dessous ... :)

J'ai récemment eu le même besoin - d'avoir une radio groupe dans lequel l'élément sélectionné peut être désélectionné en le tapant à nouveau. Je trouve que je ne pouvais accomplir que l'aide d'écouteurs, mais je était capable de le faire en utilisant une coutume RadioButton, comme si ...

public class ToggleableRadioButton extends RadioButton { 
    // Implement necessary constructors 

    @Override 
    public void toggle() { 
     if(isChecked()) { 
      if(getParent() instanceof RadioGroup) { 
       ((RadioGroup)getParent()).clearCheck(); 
      } 
     } else { 
      setChecked(true); 
     } 
    } 
} 

Notez que le bouton est basculée de différentes manières en fonction de son courant état - c'est-à-dire, en appelant setChecked(true) sur le bouton par rapport à l'appel clearCheck() sur le groupe. Si setChecked() est utilisé dans les deux cas, un bouton qui vient d'être désélectionné ne peut pas être immédiatement re-sélectionné - la logique dans RadioGroup l'empêche. Pour utiliser ce bouton, remplacez simplement vos balises <RadioButton> par <your.package.ToggleableRadioButton> dans votre fichier XML de mise en page.

+0

Excellent réponse.Merci l'homme! –