12
votes

Comment ajouter un groupe radio aux boutons radio à l'intérieur d'une table?

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: xxx

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.


0 commentaires

3 Réponses :


7
votes

Votre radiobutton Les widgets doivent être des enfants immédiats du radiogroupe pour que l'effet de groupe fonctionne.


4 commentaires

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 radiobutton sont des enfants immédiats du radiogroupes . Par conséquent, votre radiobutton 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 est ajouté en tant qu'enfants du radiogroupe via une mise en page ou via le code Java ne devrait pas avoir d'importance.



0
votes
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;
        }

1 commentaires

S'il vous plaît, ne viez pas simplement le code comme votre réponse. Une explication serait utile.



4
votes

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>


4 commentaires

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: et importer dans XML-Layout La ligne xmlns: faux = " schemas.android.com/apk/res-auto "


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.