Comment ajouter un groupe de radio aux boutons radio dans une table?

J'ai plusieurs boutons radio que je souhaite mettre en page en utilisant une table mais aussi les inclure dans un seul groupe de radio. J'ai la disposition suivante de xml:

<RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/Group1"> <TableLayout android:id="@+id/RadioButtons" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TableRow> <RadioButton android:id="@+id/rad1" android:text="RButton1" android:layout_width="105px" android:layout_height="wrap_content" android:textSize="13px"></RadioButton> <RadioButton android:id="@+id/rad2" android:text="RButton2" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content"></RadioButton> <RadioButton android:id="@+id/rad3" android:text="RButton3" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content"></RadioButton> </TableRow> </TableLayout> </RadioGroup> 

Mais malheureusement, les boutons radio situés à l'intérieur de la table semblent ignorer le fait qu'ils sont à l'intérieur des étiquettes RadioGroup et, à cause de cela, vous pouvez sélectionner plus d'un bouton radio à l'heure. J'ai remarqué qu'en enlevant la table et en ayant simplement les boutons radio, cela fonctionne très bien. Comment puis-je surmonter cela? Serait-il aussi simple que de déclarer le groupe de radio à l'intérieur de la table au lieu de l'extérieur? Merci pour toute aide.

  • Comment utiliser le chargeur d'images universel pour la liste des vignettes vidéo dans Android?
  • FirebaseRemoteConfig.fetch () ne déclenche pas OnCompleteListener à chaque fois
  • Android - Load PDF / PDF Viewer
  • Problème d'emballage de contenu Indicator TabPage de Android
  • L'animation ne démarre pas avant que les mises à jour de l'interface utilisateur ou l'événement touch
  • Comment gérer: java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize () a expiré après 10 secondes d'erreurs?
  • Phonegap Network Connection - Impossible de lire la propriété 'type' de undefined
  • Obtenir un contexte dans onCreate dans SQLiteOpenHelper
  • Gcc ON bras / Android
  • Comment ajouter l'icône (image, logo ...) à la barre d'état
  • Déplacez le curseur jusqu'à la fin de EditText?
  • Puis-je forcer à élargir la notification Android sur Android 4.1+?
  • 3 Solutions collect form web for “Comment ajouter un groupe de radio aux boutons radio dans une table?”

    Vos widgets RadioButton doivent être des enfants immédiats du RadioGroup pour que l'effet de groupe fonctionne.

    Voici mon extension RadioGroup / RadioButton (SoftRadioGroup / SoftRadioButton). RadioGroup n'est plus nécessaire dans le XML de mise en page. Vous pouvez regrouper les RadioButtons avec une propriété appelée groupe.

    SoftRadioButton:

     import java.util.HashMap; import java.util.Random; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.widget.RadioButton; public class SoftRadioButton extends RadioButton { private static HashMap<String, SoftRadioGroup> GROUP_MAPPINGS = new HashMap<String, SoftRadioGroup>(); private String mGroupName; public SoftRadioButton(Context context, AttributeSet attrs) { super(context, attrs); addToGroup(attrs); } public SoftRadioGroup getRadioGroup() { return GROUP_MAPPINGS.get(mGroupName); } private void addToGroup(AttributeSet attrs) { for (int i = 0; i < attrs.getAttributeCount(); i++) { if (attrs.getAttributeName(i).equals("group")) { String groupName = attrs.getAttributeValue(i); SoftRadioGroup group; if ((group = GROUP_MAPPINGS.get(groupName)) != null) { // RadioGroup already exists group.addView(this); setOnClickListener(group); mGroupName = groupName; } else { // this is the first RadioButton in the RadioGroup group = new SoftRadioGroup(); group.addView(this); mGroupName = groupName; setOnClickListener(group); GROUP_MAPPINGS.put(groupName, group); } return; } } // group is not specified in the layout xml. Let's generate a random // RadioGroup SoftRadioGroup group = new SoftRadioGroup(); group.addView(this); Random rn = new Random(); String groupName; do { groupName = Integer.toString(rn.nextInt()); } while (GROUP_MAPPINGS.containsKey(groupName)); GROUP_MAPPINGS.put(groupName, group); mGroupName = groupName; setOnClickListener(group); } } 

    SoftRadioGroup:

     import java.util.ArrayList; import android.view.View; import android.view.View.OnClickListener; import android.widget.RadioButton; public class SoftRadioGroup implements OnClickListener { private ArrayList<RadioButton> buttons = new ArrayList<RadioButton>(); public void addView(RadioButton button) { buttons.add(button); } @Override public void onClick(View v) { for (RadioButton button : buttons) { button.setChecked(false); } RadioButton button = (RadioButton) v; button.setChecked(true); } public RadioButton getCheckedRadioButton() { for (RadioButton button : buttons) { if (button.isSelected()) return button; } return null; } public int getChildCount() { return buttons.size(); } public RadioButton getChildAt(int i) { return buttons.get(i); } public void check(SoftRadioButton button) { if (buttons.contains(button)) { for (RadioButton b : buttons) { b.setChecked(false); } } } } 

    Utilisation dans la mise en page XML intégrée dans une table (2 groupes avec 2 boutons par groupe):

     <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1" > <TableRow android:id="@+id/tableRow1" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Your.Package.SoftRadioButton android:id="@+id/filterActivity_RadioButton_byDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:contentDescription="date" android:text="@string/filterActivity_RadioButton_byDate" fake:group="orderBy" /> <Your.Package.SoftRadioButton android:id="@+id/filterActivity_RadioButton_byPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="price" android:text="@string/filterActivity_RadioButton_byPrice" fake:group="orderBy" /> </TableRow> <TableRow android:id="@+id/tableRow2" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Your.Package.SoftRadioButton android:id="@+id/filterActivity_RadioButton_asc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="down" android:text="@string/filterActivity_RadioButton_asc" fake:group="direction" /> <Your.Package.SoftRadioButton android:id="@+id/filterActivity_RadioButton_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:contentDescription="up" android:text="@string/filterActivity_RadioButton_desc" fake:group="direction" /> </TableRow> </TableLayout> 
     rg1 = (RadioGroup)findViewById(R.id.radioGroup1); rg2 = (RadioGroup)findViewById(R.id.radioGroup2); rg1.setOnCheckedChangeListener(this); rg2.setOnCheckedChangeListener(this); } boolean rg1b = false; boolean rg2b = false; @Override public void onCheckedChanged(RadioGroup rgId, int radioButtonId) { switch (rgId.getId()) { case R.id.radioGroup1: rg1b=true; if(rg2b) rg2.clearCheck(); break; case R.id.radioGroup2: rg1b=true; if(rg1b) rg1.clearCheck(); break; } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.