Хоча це, можливо, давня тема, я хотів би швидко поділитися простим хакі-кодом, який я написав .. Це не для всіх, і я міг би зробити з деяким вдосконаленням ..
Ситуація з використанням цього коду ??
Цей код призначений для людей, які мають макет оригінального запитання або подібного, у моєму випадку це було так, як показано нижче. Це особисто для діалогу, який я використовував.
- LinLayout_Main
- LinLayout_Row1
- LinLayout_Row2
- LinLayout_Row3
Що робить сам код ??
Цей код буде перераховувати будь-який дочірній елемент "LinLayout_Main", і для кожної дочірньої організації, що є "LinearLayout", він буде перераховувати цей подання для будь-яких RadioButtons.
Просто він буде шукати батьківський "LinLayout_Main" і знайти будь-які RadioButtons, які є в будь-якому дочірньому 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) {
// 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);
}
Там можуть бути помилки, скопійовані з проекту та перейменовані у Voids / XML / ID
Ви також можете запустити один і той же тип циклу, щоб дізнатись, які елементи перевіряються