Listener comune per un gruppo di gruppi radiofonici
-
26-10-2019 - |
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
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.