Общий слушатель для группы радиостанций - PullRequest
0 голосов
/ 30 ноября 2011

У меня около 60 радиогрупп, для которых мне нужно зарегистрировать слушателя. В настоящее время вот как я это делаю:

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

и так далее для 60 радиогрупп. Есть ли способ установить все радиогруппы во фрагменте для регистрации на обычном слушателе одним-двумя операторами без необходимости набирать столько кода? Спасибо

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Если все элементы RadioGroup имеют одного и того же родителя, вы можете выполнить итерацию, используя ViewGroup.getChildAt и ViewGroup.getChildCount . Как то так:

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);
    }
}
0 голосов
/ 01 декабря 2011

Простым решением было бы создание метода в вашей деятельности или любого класса, который вы пишете, что-то вроде этого:

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

Затем вызовите этот метод из своего кода следующим образом:

registerListenerToGroup(R.id.rdoGrp1);
registerListenerToGroup(R.id.rdoGrp2);
registerListenerToGroup(R.id.rdoGrp3);
//etc.
...