Общий слушатель для кучи радиогрупп
-
26-10-2019 - |
Вопрос
У меня около 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.
Не связан с StackOverflow