我有大约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个广播组的等等。有没有办法将片段上的所有无线电组设置为在单个语句中注册到公共侦听器,而不必输入这么多代码?感谢
答案 0 :(得分:3)
如果所有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);
}
}
答案 1 :(得分:0)
一个简单的解决方案是在您的活动或您正在编写的任何类中创建一个方法,如下所示:
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.