29

我正在编写一个Activity在 android 中我在 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
            }
        }
    });
4

6 回答 6

46

初始化时触发默认的单选框。使用 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);

祝你好运

于 2013-08-30T16:53:15.980 回答
10
 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
          }

        }
    });

这对我有用。希望有帮助

于 2016-01-23T21:30:02.517 回答
6

试试这个代码。

在您的 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;
                }
            }
        }

    });

希望这可以帮助。

于 2017-02-21T11:18:37.253 回答
3

问题是因为您 OnCheckedChangeListener 方法调用RadioGroup 之后 设置。这就是为什么当方法执行到那时它们无法调用的原因。因此,要使其工作,您需要在调用方法之前设置 Listener。 而不是使用您应该使用方法来更改当前选中的.providerRadio.performClick();

providerRadio.performClick();OnCheckedChangeListenerperformClick()

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 上述方法后调用方法。

于 2016-10-07T08:34:57.773 回答
0

即使@dannys的回答没问题,我也希望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>
于 2020-02-14T15:11:20.683 回答
0

我猜您在将侦听器设置为组之前执行了单击,这就是未触发事件的原因。

于 2016-11-12T07:23:41.893 回答