3

在我的应用程序中,我需要以编程方式设置一个单选按钮并期望触发 Radiogroup 的 onCheckedChanged,以便我可以在其中执行某些操作。

以编程方式设置单选按钮的代码。

 LayoutInflater inflater = LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
 View view = inflater.inflate(R.layout.footer, null);
 RadioButton btn = (RadioButton)view.findViewById(R.id.footer_btn_course);
 btn.setChecked(true);

在另一项活动中,我做了类似的事情:

 public class MainActivity extends ActivityGroup implements RadioGroup.OnCheckedChangeListener{
      protected void onCreate(Bundle savedInstanceState){
            mRadioGroup = (RadioGroup)findViewById(R.id.footer_radio);
            mRadioGroup.setOnCheckedChangeListener(this);
      }

      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId){
            RadioButton btn = (RadioButton)findViewById(checkedId);
            if(btn != null){
                  do_something();
            }
      }
  }

但是,看起来这种方式行不通,从未调用过 onCheckedChanged。有谁知道我应该怎么做?谢谢。

4

5 回答 5

4

初始化时触发默认的单选框。使用 clearCheck 方法将所有内容设置为未选中。然后,设置处理程序,最后设置默认值,您的处理程序将触发。

itemtypeGroup.clearCheck();

然后,像往常一样添加一个监听器:

mRadioGroup = (RadioGroup)findViewById(R.id.footer_radio);
            mRadioGroup.setOnCheckedChangeListener(this);
            mRadioGroup.clearCheck();

RadioButton btn = (RadioButton)view.findViewById(R.id.footer_btn_course);
btn.setChecked(true);
于 2016-02-09T05:53:11.660 回答
1

我有同样的问题..

这是我的方法:

 class Myclass extends Activity{
    protected void onCreate(Bundle savedInstanceState) {

    radiogroup = (RadioGroup) findViewById(R.id.radiogroupDecisionUncertain);
            radio1 = (RadioButton) findViewById(R.id.radiobuttonNo_U);
            radio2 = (RadioButton) findViewById(R.id.radiobuttonYes_U);
// declare the onCheckChangedListener
radiogroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub

    if (checkedId == radio1.getId()) { //do something

                } else { // do other thing
                }

            }
        });

radiogroup.check(radio1.getId());


}
}

请注意,我在注册监听器后设置了选中的单选按钮..

于 2013-07-19T12:40:31.507 回答
1

而不是btn.setChecked(true);

用过btn.performClick();这个就行了。

于 2013-01-09T06:01:53.817 回答
1

我不确定这个问题,但可能是您错过了参考您的广播组 ID。试试这个来看看效果(在你的内部onCreate()):

RadioGroup rdGroup = (RadioGroup) findViewById(R.id.footer_radio);
    rdGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() 
    {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) 
        {
            RadioButton btn = (RadioButton)findViewById(checkedId);
            if(btn != null){
                  do_something();
            }
        }
    });

或者可能(RadioButton)findViewById(checkedId)返回null。

Spinner如果您的情况模棱两可,请尝试。

于 2012-09-07T02:28:33.657 回答
0

实施OnCheckedChangeListener而不是RadioGroup.onCheckedChangeListener 将起作用。

public class MainActivity extends ActivityGroup implements OnCheckedChangeListener{
.....

}
于 2013-01-09T05:55:29.923 回答