Chociaż jest to może starszy temat, chciałbym szybko podzielić się prostym, hakerskim kodem, który napisałem. Nie jest dla wszystkich i przydałoby się też pewne udoskonalenie.
Sytuacja, aby użyć tego kodu?
Ten kod jest dla osób, które mają układ oryginalnego pytania lub podobny, w moim przypadku był jak poniżej. To osobiście dotyczyło Dialogu, którego używałem.
- LinLayout_Main
- LinLayout_Row1
- ImageView
- Przycisk radiowy
- LinLayout_Row2
- ImageView
- Przycisk radiowy
- LinLayout_Row3
- ImageView
- Przycisk radiowy
Co kod robi sam?
Ten kod wyliczy kiedykolwiek element podrzędny „LinLayout_Main”, a dla każdego elementu podrzędnego, który jest elementem „LinearLayout”, wyliczy ten widok dla wszystkich elementów RadioButtons.
Po prostu będzie wyglądać na rodzica „LinLayout_Main” i znajdzie wszystkie RadioButtons, które są w dowolnym podrzędnym układzie liniowym.
MyMethod_ShowDialog
okno dialogowe z plikiem układu XML, jednocześnie sprawdzając, czy ustawia "setOnClickListener" dla każdego znalezionego RadioButton
MyMethod_ClickRadio zapętli
każdy element RadioButton w taki sam sposób, jak „MyMethod_ShowDialog”, ale zamiast ustawiać „setOnClickListener”, zamiast tego „setChecked (false)” wyczyści każdy element RadioButton, a w ostatnim kroku „setChecked (false)” do elementu RadioButton, który nazywana zdarzeniem kliknięcia.
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);
}
Mogą być błędy skopiowane z projektu i przemianowane na Voids / XML / ID
Możesz także uruchomić ten sam typ pętli, aby dowiedzieć się, które elementy są zaznaczone