题
我有大约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