2016-06-26 12 views
0

我已创建一个带有3个单选按钮的动态无线电组..我的问题是,所有3个按钮都可以单击并且无线电组无法听到检查更改。我希望收音机组内单选按钮的默认行为只能检查一个单选按钮。动态创建的无线电组没有听到选中的更改监听器

RadioButton[] rb = new RadioButton[question.getAnswers().size()]; 
     RadioGroup rg  = new RadioGroup(getActivity()); 
     rg.setOrientation(RadioGroup.VERTICAL); 
     questionContainer.addView(rg); 

     for (int i =0; i < question.getAnswers().size(); i++) { 
      rb[i] = new RadioButton(getActivity()); 
      rb[i].setText(question.getAnswers().get(i)); 
      rg.addView(rb[i]); 
     } 
     rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { 
       Log.e(debugTag, "radio button position: "+checkedId); 
      } 
     }); 

questionContainer是我的片段的LinearLayout中容器

+0

您是否尝试将ID设置为动态添加的单选按钮? 'rb [i] .setId(some_unique_id);' – x0r

+0

是的,但没有结果... – tsiro

+0

我认为问题来自我用来创建单选按钮的库... android默认按钮按预期工作...刚刚测试 – tsiro

回答

0

的问题,实际上从我用它来创建单选按钮库导出。经过一些挖掘和@R提供的2个非常有用的链接。基里尔我不会创建一个RadioGroup来放置单选按钮。我只是处理CompoundButton(从此类的RadioButton扩展)自己检查更改侦听器。

final RadioButton[] rb = new RadioButton[question.getAnswers().size()]; 

     com.rey.material.widget.CompoundButton.OnCheckedChangeListener c = new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { 
       if (isChecked) { 
        for (RadioButton aRb : rb) { 
         aRb.setChecked(aRb == compoundButton); 
        } 
       } 
      } 
     }; 

     for (int i =0; i < question.getAnswers().size(); i++) { 
      rb[i] = new RadioButton(getActivity()); 
      rb[i].setId(i); 
      rb[i].setOnCheckedChangeListener(c); 
      rb[i].setChecked(false); 
      rb[i].setText(question.getAnswers().get(i)); 
      questionContainer.addView(rb[i]); 
     }