用于radiogroup的android onCheckedChanged

时间:2013-08-30 15:09:03

标签: android radio-button radio-group

我正在android中编写Activity,我在RadioGroup下有两个单选按钮。默认情况下会检查其中一个。但我无法在onCreate方法中触发事件,以便我可以做一些事情。点击后onCheckedChanged运行正常。

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
    RadioButton providerRadio = (RadioButton) findViewById(R.id.a);
    providerRadio.performClick();

    ItemtypeGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged (RadioGroup group,int checkedId){

            Log.d("chk", "id" + checkedId);

            if (checkedId == R.id.a) {
                //some code
            } else if (checkedId == R.id.b) {
                //some code
            }
        }
    });

6 个答案:

答案 0 :(得分:40)

在初始化时触发默认的无线电复选框。使用clearCheck方法将所有内容设置为未选中,然后设置处理程序,然后设置默认值并触发处理程序。

itemtypeGroup.clearCheck();

然后像往常一样添加一个听众...

itemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });

然后检查默认的单选按钮,你的听众将会开火。

rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);

祝你好运

答案 1 :(得分:8)

 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            if (checkedId == R.id.radioButton1) {
             //do work when radioButton1 is active
            } else  if (checkedId == R.id.radioButton2) {
             //do work when radioButton2 is active
          } else  if (checkedId == R.id.radioButton3) {
             //do work when radioButton3 is active
          }

        }
    });

这项工作对我而言。希望是有帮助的

答案 2 :(得分:4)

试试此代码。

在onCreate方法中声明此代码。

    RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
    radioGroup.clearCheck();
    radioGroup.setOnCheckedChangeListener(new  RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {

            RadioButton rb = (RadioButton) group.findViewById(checkedId);
            if (null != rb && checkedId > -1) {

                // checkedId is the RadioButton selected
                switch (checkedId) {
                    case R.id.one:
                     // Do Something
                      break;

                    case R.id.two:
                    // Do Something
                      break;   

                    case R.id.three:
                    // Do Something   
                        break;
                }
            }
        }

    });

希望这有帮助。

答案 3 :(得分:3)

问题是因为您在 OnCheckedChangeListener之后 RadioGroup providerRadio.performClick(); 方法调用

这就是为什么当providerRadio.performClick();方法执行到那时它们没有OnCheckedChangeListener可以调用的原因。因此,为了使其工作,您需要在调用performClick()方法之前设置监听器
而不是使用RadioButton.performClick(),您应该使用RadioGroup.check()方法更改当前选中的RadioButton

因此,您可以使用此代码更改RadioGroup的当前选择

RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype);
ItemtypeGroup
        .setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                Log.d("chk", "id" + checkedId);

                if (checkedId == R.id.a) {
                    //some code
                } else if (checkedId == R.id.b) {
                    //some code
                }

            }

        });
ItemtypeGroup.check(R.id.a);

注意: - 请务必在代码段中添加 RadioGroup.check() 后调用 OnCheckedChangeListener 方法。

答案 4 :(得分:0)

我猜你在将听众设置为群组之前正在执行点击,这就是未触发事件的原因。

答案 5 :(得分:0)

即使@dannys answer可以,我还是要从 XML 布局定义文件中获取默认值,而不是在代码中进行设置。

这就是为什么我使用这种方法:

  1. 存储单选组的默认值
  2. 清除所有支票
  3. 初始化OnCheckedChangeListener
  4. 再次检查触发监听器的默认设置(之前已存储)

使用first_radio_button作为默认单选按钮的代码,代码看起来像这样:

// call this in any init method
_myRadioGroup    = _myViewContainingTheRadioGroup.findViewById(R.id.my_radio_group);
int defaultValue = _myRadioGroup.getCheckedRadioButtonId();
_myRadioGroup.clearCheck();
_myRadioGroup.setOnCheckedChangeListener(_myRadioGroupCheckedChangeListener);
_myRadioGroup.check(defaultValue);

OnCheckedChangeListener放在班上的某个地方:

private RadioGroup.OnCheckedChangeListener _myRadioGroupCheckedChangeListener = new RadioGroup.OnCheckedChangeListener()
{
  @Override
  public void onCheckedChanged(RadioGroup group, int checkedId)
  {
    switch(group.findViewById(checkedId).getId())
    {
      case R.id.first_radio_button:
        // do stuff
        break;
      case R.id.second_radio_button:
        // do stuff
        break;
      // ...
    }
  }
};

这是我的广播组xml

  <RadioGroup
    android:id="@+id/my_radio_group"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <RadioButton
      android:id="@+id/first_radio_button"
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:checked="true"
      android:text="@string/first_radio_button_text"/>

    <RadioButton
      android:id="@+id/second_radio_button"
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:text="@string/second_radio_button_text"/>

    // ...

  </RadioGroup>