Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
radiogroup的android OnCheckedChange_Android_Radio Button_Radio Group - Fatal编程技术网

radiogroup的android OnCheckedChange

radiogroup的android OnCheckedChange,android,radio-button,radio-group,Android,Radio Button,Radio Group,我正在android中编写一个活动,其中一个组下有两个单选按钮。默认情况下会选中其中一个。但是我不能在onCreate方法中触发事件,以便在该方法中执行某些操作。单击时,onCheckedChanged运行正常 RadioGroup ItemtypeGroup = (RadioGroup) findViewById(R.id.rechargeItemtype); RadioButton providerRadio = (RadioButton) findViewById(R.id.a);

我正在android中编写一个
活动
,其中一个组下有两个单选按钮。默认情况下会选中其中一个。但是我不能在
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
            }
        }
    });

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

itemtypeGroup.clearCheck();
rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);
然后像往常一样添加一个侦听器

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.clearCheck();
rb = (RadioButton) view.findViewById(R.id.a);
rb.setChecked(true);
祝你好运

 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
          }

        }
    });

这是我的工作。希望是有帮助的

问题在于,您正在设置
OnCheckedChangeListener
上的
放射组
提供程序Radio.performClick()之后
方法调用

这就是为什么当
providerRadio.performClick()时方法执行,直到它们的调用不可用。因此,要使其工作,您需要在调用
performClick()
方法之前设置侦听器。

您应该使用
RadioButton.performClick()
方法来更改当前选中的
RadioButton
,而不是使用
RadioButton.performClick()

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

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);
注意:-
确保调用
方法,然后在代码片段中添加
一次checkedChangeListener

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

尝试此代码

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

    });
希望这能有所帮助。

即使没有问题,我还是希望从XML布局定义文件中获取默认值,而不是在代码中设置它

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

  • 存储无线组中的默认值
  • 结清所有支票
  • 在CheckedChangeListener上初始化
  • 再次检查触发侦听器的默认值(先前存储)
  • 如果将
    first_单选按钮
    作为默认单选按钮,则代码中可能会出现这种情况:

    // 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>
    
    
    // ...
    
    设置
    侦听器后,请尝试放置
    性能单击()
    代码,谢谢您的评论,但运气不好:(嗯……你有没有在你的
    监听器中设置一个断点,以确保它没有进入那里,并且里面的其他东西没有把它搞砸?编辑。当我点击收音机时,我可以在logcat中看到效果。这个“rb=(RadioButton)视图是什么。findViewById(R.id.a);”意思是?我们必须在onCheckedChanged中声明吗?三个步骤。全部清除,连接处理程序,设置默认值。因为默认值是在侦听器连接后设置的,所以侦听器代码将运行。我为向下投票感到抱歉-这是无意的。我试图通过单击向上投票来更正它,但我无法。如果您知道更正向下投票的方法,请让我知道。NP别担心。@Jorvis For three groups+我可能会在checkedID上使用switch语句。计划所有checkedID在应用程序中都是唯一的。我可能会使用单独的处理程序,具体取决于应用程序。假设我有三个广播组,那么我将如何处理其中三个广播组的侦听器?你是说我应该实现三个广播组不同的侦听器以及三个无线电组的三个onCheckedChanged方法。否。您必须使用一个侦听器并检查在侦听器中选择的侦听器。