Oyente común para un montón de grupos de radio
-
26-10-2019 - |
Pregunta
Tengo alrededor de 60 grupos de radio para los que necesito registrar un oyente. Actualmente así es como lo hago:
RadioGroup rg1 = (RadioGroup) getView().findViewById(R.id.rdoGrp1);
rg1.setOnCheckedChangeListener(this);
rg1 = (RadioGroup) getView().findViewById(R.id.rdoGrp2);
rg1.setOnCheckedChangeListener(this);
rg1 = (RadioGroup) getView().findViewById(R.id.rdoGrp3);
rg1.setOnCheckedChangeListener(this);
y así sucesivamente para los 60 grupos de radio. ¿Hay alguna manera de configurar todos los grupos de radio en el fragmento para registrarse en un oyente común en una sola declaración o dos sin tener que escribir este código? Gracias
Solución
Si todos los elementos de radiogrupo comparten el mismo padre, puede iterar usando Vergroup.getChildat y ViewGroup.getChildCount. Algo como esto:
ViewGroup parent = (ViewGroup) findViewById(R.id.ParentViewId);
for (int i = 0; i < parent.getChildCount(); i++) {
View currentView = parent.getChildAt(i);
if (currentView instanceof RadioGroup) {
((RadioGroup) currentView).setOnCheckedChangeListener(this);
}
}
Otros consejos
Una solución fácil sería crear un método en su actividad o cualquier clase que esté escribiendo, algo como esto:
private void registerListenerToGroup(int groupId) {
RadioGroup rg = (RadioGroup) getView().findViewById(groupId);
rg.setOnCheckedChangeListener(this);
}
Luego, llame a este método desde su código así:
registerListenerToGroup(R.id.rdoGrp1);
registerListenerToGroup(R.id.rdoGrp2);
registerListenerToGroup(R.id.rdoGrp3);
//etc.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow