Domanda

Ho circa 60 gruppi radiofonici che ho bisogno di registrare un listener per. Attualmente questo è come lo faccio:

    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);

e così via per i gruppi di radio 60. C'è un modo per impostare tutti i gruppi radiofonici sul frammento di registrarsi ad un ascoltatore comune in una singola istruzione o due senza dover digitare questo molto codice? Grazie

È stato utile?

Soluzione

Se tutti gli elementi RadioGroup condividono lo stesso genitore, si potrebbe iterare utilizzando ViewGroup.getChildAt e ViewGroup .getChildCount . Qualcosa di simile a questo:

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);
    }
}

Altri suggerimenti

Una soluzione semplice sarebbe quella di creare un metodo nella vostra attività o qualunque classe che si sta scrivendo, qualcosa di simile a questo:

private void registerListenerToGroup(int groupId) {
    RadioGroup rg = (RadioGroup) getView().findViewById(groupId);
    rg.setOnCheckedChangeListener(this);
}

Poi, chiamare questo metodo dal codice in questo modo:

registerListenerToGroup(R.id.rdoGrp1);
registerListenerToGroup(R.id.rdoGrp2);
registerListenerToGroup(R.id.rdoGrp3);
//etc.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top