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の無線グループについても同様です。これだけ多くのコードを入力しなくても、フラグメント上のすべての無線グループを1つまたは2つのステートメントで共通のリスナーに登録するように設定する方法はありますか?ありがとう

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 に答える