0

我有大约 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 个广播组。有没有办法将片段上的所有无线电组设置为在一个或两个语句中注册到一个公共侦听器而无需输入这么多代码?谢谢

4

2 回答 2

3

如果所有 RadioGroup 元素共享同一个父元素,则可以使用ViewGroup.getChildAtViewGroup.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);
    }
}
于 2011-11-30T20:25:39.740 回答
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.
于 2011-11-30T20:05:00.727 回答