Хотя это, возможно, более старая тема, я хотел бы быстро поделиться простым хакерским кодом, который я написал .. Это не для всех, и его тоже можно немного улучшить ..
Ситуация использовать этот код ??
Этот код предназначен для людей, у которых есть макет исходного вопроса или аналогичный, в моем случае это было так, как показано ниже. Это лично было для диалога, который я использовал.
- LinLayout_Main
- LinLayout_Row1
- LinLayout_Row2
- LinLayout_Row3
Что делает сам код ??
Этот код будет перечислять все дочерние элементы «LinLayout_Main», а затем для каждого дочернего элемента, являющегося «LinearLayout», он будет перечислять этот View для любых RadioButton.
Просто он будет искать родительский «LinLayout_Main» и находить любые RadioButton, которые есть в любом дочернем LinearLayouts.
MyMethod_ShowDialog
покажет диалоговое окно с файлом макета XML, а также будет искать его, чтобы установить "setOnClickListener" для каждого найденного RadioButton.
MyMethod_ClickRadio Зацикливает
каждый RadioButton так же, как и MyMethod_ShowDialog, но вместо установки «setOnClickListener» он вместо этого будет «setChecked (false)», чтобы очистить каждый RadioButton, а затем, когда последний шаг будет «setChecked (false)» для RadioButton, который называется событием клика.
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) {
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).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);
}
Возможны ошибки, скопированные из проекта и переименованные в Voids / XML / ID
Вы также можете запустить такой же цикл, чтобы узнать, какие элементы отмечены