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

¿Fue útil?

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
scroll top