Eh bien, j'ai écrit cette classe simple.
Utilisez-la simplement comme ceci :
// ajoutez ici autant d'identifiants de ressources RadioButton que vous le souhaitez
GRadioGroup gr = new GRadioGroup(this,
R.id.radioButton1, R.id.radioButton2, R.id.radioButton3);
ou
GRadioGroup gr = new GRadioGroup(rb1, rb2, rb3);
// où RadioButton rb1 = (RadioButton) findViewById(R.id.radioButton1);
// etc.
Vous pouvez l'appeler dans onCreate() de l'activité par exemple. Peu importe quel RadioButton
vous cliquez, les autres deviendront désélectionnés. De plus, peu importe si certains RadioButtons
sont à l'intérieur de certains RadioGroup
, ou non.
Voici la classe :
package pl.infografnet.GClasses;
import java.util.ArrayList;
import java.util.List;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewParent;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class GRadioGroup {
List radios = new ArrayList();
/**
* Constructeur, qui vous permet de passer un certain nombre d'instances RadioButton,
* créant un groupe.
*
* @param radios
* Un RadioButton ou plus.
*/
public GRadioGroup(RadioButton... radios) {
super();
for (RadioButton rb : radios) {
this.radios.add(rb);
rb.setOnClickListener(onClick);
}
}
/**
* Constructeur, qui vous permet de passer un certain nombre de RadioButtons
* représentés par des identifiants de ressources, créant un groupe.
*
* @param activity
* Vue actuelle (ou activité) à laquelle appartiennent ces RadioButtons.
* @param radiosIDs
* Un RadioButton ou plus.
*/
public GRadioGroup(View activity, int... radiosIDs) {
super();
for (int radioButtonID : radiosIDs) {
RadioButton rb = (RadioButton)activity.findViewById(radioButtonID);
if (rb != null) {
this.radios.add(rb);
rb.setOnClickListener(onClick);
}
}
}
/**
* Cela se produit à chaque fois qu'un RadioButton est cliqué,
* et désélectionne tous les autres du groupe.
*/
OnClickListener onClick = new OnClickListener() {
@Override
public void onClick(View v) {
// désélectionnons tous les radios du groupe
for (RadioButton rb : radios) {
ViewParent p = rb.getParent();
if (p.getClass().equals(RadioGroup.class)) {
// si le RadioButton appartient à un RadioGroup,
// alors désélectionner tous les radios qui y sont
RadioGroup rg = (RadioGroup) p;
rg.clearCheck();
} else {
// si le RadioButton N'APPARTIENT PAS à un RadioGroup,
// il suffit de le désélectionner
rb.setChecked(false);
}
}
// maintenant sélectionnons le RadioButton actuellement cliqué
if (v.getClass().equals(RadioButton.class)) {
RadioButton rb = (RadioButton) v;
rb.setChecked(true);
}
}
};
}