Während dies vielleicht ein älteres Thema ist, möchte ich schnell einfachen Hacky-Code teilen, den ich geschrieben habe. Es ist nicht jedermanns Sache und könnte auch etwas verfeinert werden.
Die Situation, um diesen Code zu verwenden?
Dieser Code ist für Personen gedacht, die ein Layout der ursprünglichen Frage oder ähnliches haben. In meinem Fall war es wie folgt. Dies war persönlich für einen Dialog, den ich benutzte.
- LinLayout_Main
- LinLayout_Row1
- LinLayout_Row2
- LinLayout_Row3
Was macht der Code selbst?
Dieser Code listet jedes untergeordnete Element von "LinLayout_Main" auf und listet für jedes untergeordnete Element, das ein "LinearLayout" ist, diese Ansicht für alle RadioButtons auf.
Es wird einfach das übergeordnete "LinLayout_Main" angezeigt und alle RadioButtons gefunden, die sich in einem untergeordneten LinearLayout befinden.
MyMethod_ShowDialog
einen Dialog mit einer XML-Layoutdatei an und sucht gleichzeitig nach dem "setOnClickListener" für jeden gefundenen RadioButton
MyMethod_ClickRadio schleift
jeden RadioButton auf die gleiche Weise wie "MyMethod_ShowDialog", aber anstatt "setOnClickListener" zu setzen, wird stattdessen "setChecked (false)" gesetzt, um jeden RadioButton zu löschen, und als letzter Schritt wird "setChecked (false)" auf den RadioButton gesetzt das Klickereignis genannt.
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) {
// Perform look for each child of main LinearLayout
int iChildCount1 = tmpLayMain.getChildCount();
for (int iLoop1=0; iLoop1 < iChildCount1; iLoop1++){
View tmpChild1 = tmpLayMain.getChildAt(iLoop1);
if (tmpChild1 instanceof LinearLayout) {
// Perform look for each LinearLayout child of main 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).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);
}
Möglicherweise gibt es Fehler, die aus dem Projekt kopiert und in Voids / XML / ID umbenannt wurden
Sie können auch denselben Schleifentyp ausführen, um herauszufinden, welche Elemente überprüft werden