【问题标题】:How to set radio button checked as default in radiogroup?如何在radiogroup中将选中的单选按钮设置为默认值?
【发布时间】:2012-02-28 20:15:46
【问题描述】:

我已经动态创建了RadioGroupRadioButton,如下所示:

RadioGroup radioGroup = new RadioGroup(context);
                    RadioButton radioBtn1 = new RadioButton(context);
                    RadioButton radioBtn2 = new RadioButton(context);
                    RadioButton radioBtn3 = new RadioButton(context);

                    radioBtn1.setText("Less");
                    radioBtn2.setText("Normal");
                    radioBtn3.setText("More");

                    radioBtn2.setChecked(true);

                    radioGroup.addView(radioBtn1);
                    radioGroup.addView(radioBtn2);
                    radioGroup.addView(radioBtn3);

这里的步骤radioBtn2.setChecked(true); 导致radioBtn2 始终被选中。这意味着我不能通过选中其他两个单选按钮(radioBtn1,radioBtn3)来取消选中radioBtn2。我想让RadioGroup 一次只能检查一个单选按钮(现在它可以一次检查两个单选按钮)。

我该如何解决这个问题?

【问题讨论】:

  • 有没有动态的需要???

标签: android radio-button radio-group


【解决方案1】:

你应该像这样检查 radiogroup 中的单选按钮:

radiogroup.check(IdOfYourButton)

当然,您首先必须为您的单选按钮设置一个 ID

编辑:我忘了,radioButton.getId() 也可以,谢谢 Ramesh

编辑2:

android:checkedButton="@+id/my_radiobtn"

在无线电组 xml 中工作

【讨论】:

  • 或者如果你不想识别你的RadioButton并且你知道你可以使用的索引((RadioButton)radioGroup.getChildAt(INDEX)).setChecked(true);
  • 你不应该那样做。这将导致此问题中描述的“setChecked”问题。当然,有一些方法可以在没有按钮 ID 的情况下做到这一点,但请不要使用 setChecked() 一种方法是 radiogroup.check(((RadioButton)radioGroup.getChildAt(INDEX)).getId()) 或类似的东西
  • 最好不要忘记将单选按钮添加到单选按钮组之前调用 group.check(button.getId())
  • 我必须这样做:radioGroup.Check(radioGroup.GetChildAt(0).Id); 对于 Xamarin.Android 用户
【解决方案2】:
    RadioGroup radioGroup = new RadioGroup(WvActivity.this);
    RadioButton radioBtn1 = new RadioButton(this);
    RadioButton radioBtn2 = new RadioButton(this);
    RadioButton radioBtn3 = new RadioButton(this);

    radioBtn1.setText("Less");
    radioBtn2.setText("Normal");
    radioBtn3.setText("More");


    radioGroup.addView(radioBtn1);
    radioGroup.addView(radioBtn2);
    radioGroup.addView(radioBtn3);

    radioGroup.check(radioBtn2.getId());

【讨论】:

    【解决方案3】:

    我同事的代码也有同样的问题。这听起来是因为您的单选按钮未正确设置您的单选组。这就是您可以多选单选按钮的原因。我尝试了很多东西,最后我做了一个实际上是错误的技巧,但效果很好。

    for ( int i = 0 ; i < myCount ; i++ )
    {
        if ( i != k )
        {
            System.out.println ( "i = " + i );
            radio1[i].setChecked(false);
        }
    }
    

    在这里我设置了一个 for 循环,它检查可用的单选按钮并取消选择除新单击的单选按钮之外的所有单选按钮。试试看。

    【讨论】:

      【解决方案4】:
      RadioGroup radioGroup = new RadioGroup(context);
      RadioButton radioBtn1 = new RadioButton(context);
      RadioButton radioBtn2 = new RadioButton(context);
      RadioButton radioBtn3 = new RadioButton(context);
      
      radioBtn1.setText("Less");
      radioBtn2.setText("Normal");
      radioBtn3.setText("More");
      
      radioGroup.addView(radioBtn1);
      radioGroup.addView(radioBtn2);
      radioGroup.addView(radioBtn3);
      radioBtn2.setChecked(true);
      

      【讨论】:

      • 重要的是在所有单选按钮都添加到单选组之后使用setChecked()。那么,radioGroup.check(radioBtn2.getId()) 就不需要了
      【解决方案5】:

      对于 xml 属性,它的 android:checkedButton 需要检查 RadioButtonid

      <RadioGroup
      ...
      ...
      android:checkedButton="@+id/IdOfTheRadioButtonInsideThatTobeChecked"
      ... >....</RadioGroup>
      

      【讨论】:

        【解决方案6】:

        在 XML 文件中,设置 RadioGroup 中的 android:checkedButton 字段,并使用默认 RadioButton 的 id:

        <RadioGroup
            ....
            android:checkedButton="@+id/button_1">
        
            <RadioButton
                android:id="@+id/button_1"
                ...../>
        
            <RadioButton
                android:id="@+id/button_2"
                ...../>
        
            <RadioButton
                android:id="@+id/button_3"
                ...../>
        </RadioGroup>
        

        【讨论】:

          【解决方案7】:

          这是 RadioGroup 的错误

          RadioButton radioBtn2 = new RadioButton(context);
          

          没有viewId的radioBtn2,generateViewId在onChildViewAdded()

          public void onChildViewAdded(View parent, View child) {
              if (parent == RadioGroup.this && child instanceof RadioButton) {
                  int id = child.getId();
                  // generates an id if it's missing
                  if (id == View.NO_ID) {
                      id = View.generateViewId();
                      child.setId(id);
                  }
                  ((RadioButton) child).setOnCheckedChangeWidgetListener(
                          mChildOnCheckedChangeListener);
              }
          
              if (mOnHierarchyChangeListener != null) {
                  mOnHierarchyChangeListener.onChildViewAdded(parent, child);
              }
          }
          

          所以,首先是radioGroup.addView(radioBtn2),然后是radioBtn2.setChecked(true);

          像这样:

          RadioGroup radioGroup = new RadioGroup(context);
          RadioButton radioBtn1 = new RadioButton(context);
          RadioButton radioBtn2 = new RadioButton(context);
          RadioButton radioBtn3 = new RadioButton(context);
          
          radioBtn1.setText("Less");
          radioBtn2.setText("Normal");
          radioBtn3.setText("More");
          
          radioGroup.addView(radioBtn1);
          radioGroup.addView(radioBtn2);
          radioGroup.addView(radioBtn3);
          
          radioBtn2.setChecked(true);
          

          【讨论】:

            【解决方案8】:

            在你的activity.xml中添加android:checked = "true"

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-01-06
              • 1970-01-01
              • 2013-03-27
              • 2021-02-18
              • 2015-12-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多