J'ai plusieurs boutons radio que je veux mettre en page à l'aide d'une table, mais les incluent également dans un seul groupe de radio. J'ai la disposition XML suivante: mais malheureusement, les boutons radio à l'intérieur de la table semblent ignorer le fait qu'ils sont à l'intérieur des balises de radiogroupe et à cause de cela, vous pouvez sélectionner plusieurs bouton radio à l'époque. J'ai remarqué que en retirant la table et en faisant juste que les boutons radio fonctionnent bien. Comment puis-je surmonter cela? Serait-ce 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. p> p>
3 Réponses :
Votre radiobutton code> Les widgets doivent être des enfants immédiats du radiogroupe code> pour que l'effet de groupe fonctionne. p>
Il n'ya donc aucun moyen de structurer les boutons avec une table et de leur faire partie d'un groupe de radio?
Seulement si les widgets code> radiobutton (code> sont des enfants immédiats du radiogroupes code>. Par conséquent, votre radiobutton code> Les widgets devront être dans une rangée ou une colonne dans une seule cellule de votre table.
Et si j'ignais de manière programmable chaque bouton radio dans un groupe?
@nobalg: si le radiobuttons code> est ajouté en tant qu'enfants du radiogroupe code> via une mise en page ou via le code Java ne devrait pas avoir d'importance.
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;
}
S'il vous plaît, ne viez pas simplement le code comme votre réponse. Une explication serait utile.
Voici mon extension Radiogroupe / Radiobutton (Softradiogroup / Softradiobutton). Le radiogroupe n'est plus nécessaire dans la mise en page XML. Vous pouvez regrouper les radiobutons avec une propriété appelée groupe.
SOFTRADIOBUTON: P>
<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>
AVERTISSEMENT: le code va fuir des vues. Il ajoutera à la carte statique toutes les vues de softradiobutton à chaque fois que les vues sont créées. C'est une bonne idée de résoudre le problème avec une vue personnalisée. La bonne solution pourrait être une bonne solution pour ajouter le groupe de vue quelque part à la racine de la hiérarchie de vue et la laisser trouver toutes les vues d'enfants et les associer à des groupes.
Correction de l'attribut 'Group' en ajoutant Attr.xML:
Un quickfix pour la mémoire-fuite: Ajouter à SOFTRADIOBUTTON La méthode OnDetachechedfromwindow () et Call Group_Mappings.ReMove (MgrrouPname);
C'était très utile, j'ai ajouté un nouveau constructeur avec le nom de groupe comme une chaîne pour pouvoir les créer de manière dynamique.