Alors que cela peut être un sujet plus ancien, je voudrais rapidement partager le code bricolage que j'ai écrit.. Ce n'est pas pour tout le monde et pourrait être amélioré..
La situation pour utiliser ce code ??
Ce code est pour les personnes qui ont une mise en page de la question d'origine ou similaire, dans mon cas, c'était comme ci-dessous. C'était personnellement pour une boîte de dialogue que j'utilisais.
- LinLayout_Main
- LinLayout_Row1
- LinLayout_Row2
- LinLayout_Row3
Que fait le code lui-même ??
Ce code va énumérer chaque enfant de "LinLayout_Main" et pour chaque enfant qui est un "LinearLayout", il énumérera ensuite cette vue pour trouver des boutons radio.
Simplement, il cherchera le parent "LinLayout_Main" et trouvera les boutons radio dans les LinearLayouts enfants.
MyMethod_ShowDialog
Affichera une boîte de dialogue avec un fichier de mise en page XML tout en essayant de définir le "setOnClickListener" pour chaque RadioButton trouvé
MyMethod_ClickRadio
Parcourra chaque RadioButton de la même manière que "MyMethod_ShowDialog" le fait mais au lieu de définir le "setOnClickListener", il "setChecked(false)" pour effacer chaque RadioButton et ensuite, comme dernière étape, "setChecked(false)" à l'RadioButton ayant déclenché l'événement de clic.
public void MyMethod_ShowDialog(final double tmpLat, final double tmpLng) {
final Dialog dialog = new Dialog(actMain);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.layout_dialogXML);
final LinearLayout tmpLayMain = (LinearLayout)dialog.findViewById(R.id.LinLayout_Main);
if (tmpLayMain!=null) {
// Effectuer une recherche pour chaque enfant du LinearLayout principal
int iChildCount1 = tmpLayMain.getChildCount();
for (int iLoop1=0; iLoop1 < iChildCount1; iLoop1++){
View tmpChild1 = tmpLayMain.getChildAt(iLoop1);
if (tmpChild1 instanceof LinearLayout) {
// Effectuer une recherche pour chaque enfant LinearLayout du LinearLayout principal
int iChildCount2 = ((LinearLayout) tmpChild1).getChildCount();
for (int iLoop2=0; iLoop2 < iChildCount2; iLoop2++){
View tmpChild2 = ((LinearLayout) tmpChild1).getChildAt(iLoop2);
if (tmpChild2 instanceof RadioButton) {
((RadioButton) tmpChild2).setOnClickListener(new RadioButton.OnClickListener() {
public void onClick(View v) {
MyMethod_ClickRadio(v, dialog);
}
});
}
}
}
}
Button dialogButton = (Button)dialog.findViewById(R.id.LinLayout_Save);
dialogButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
}
dialog.show();
}
public void MyMethod_ClickRadio(View vRadio, final Dialog dDialog) {
final LinearLayout tmpLayMain = (LinearLayout)dDialog.findViewById(R.id.LinLayout_Main);
if (tmpLayMain!=null) {
int iChildCount1 = tmpLayMain.getChildCount();
for (int iLoop1=0; iLoop1 < iChildCount1; iLoop1++){
View tmpChild1 = tmpLayMain.getChildAt(iLoop1);
if (tmpChild1 instanceof LinearLayout) {
int iChildCount2 = ((LinearLayout) tmpChild1).getChildCount();
for (int iLoop2=0; iLoop2 < iChildCount2; iLoop2++){
View tmpChild2 = ((LinearLayout) tmpChild1).getChildAt(iLoop2);
if (tmpChild2 instanceof RadioButton) {
((RadioButton) tmpChild2).setChecked(false);
}
}
}
}
}
((RadioButton) vRadio).setChecked(true);
}
Il peut y avoir des bugs, copié depuis le projet et renommé Voids/XML/ID
Vous pouvez également exécuter le même type de boucle pour trouver les éléments cochés