Вопрос

У меня около 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 радиогрупп. Есть ли способ установить все радиогруппы в фрагменте, чтобы зарегистрироваться на общего слушателя в одном или двух операторах без необходимости набирать такой код? Спасибо

Это было полезно?

Решение

Если все элементы радиогруппы имеют одного и того же родителя, вы можете использовать использование 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);
    }
}

Другие советы

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

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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top