使用没有RadioGroup的RadioButtons?

时间:2016-05-29 05:26:17

标签: android xml

我可以在没有RadioGroup的情况下使用RadioButtons吗?如果没有那么请解释原因?我正在为xml中的Android应用程序编写一个布局。

4 个答案:

答案 0 :(得分:3)

答案。你可以在没有RadioGroup的情况下使用RadioButton但是如果你在没有RadioGroup的情况下使用RadioButton那么你就可以为它做一些编程,以使其成为完美的方式。

我已经发布了两个示例,因此您可以更好地理解。

没有RadioGroup示例的RadioButton:

让我们说这是你在RadioGroup的布局。

<强> layout.xml:

<RadioButton 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radBtnMM"
/>
<RadioButton 
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/radBtnInch"
/>

要处理它,选择java代码如下。

public class MainActivity extends Activity implements OnCheckedChangeListener {
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    setContentView(R.layout.activity_main);
    rb1 = (RadioButton) findViewById(R.id.radBtnInch);
    rb1.setOnCheckedChangeListener(this);
    rb2 = (RadioButton) findViewById(R.id.radBtnMM);
    rb2.setOnCheckedChangeListener(this);
    return true;
  }
  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked) {
      if (buttonView.getId() == R.id.radBtnInch) {
        rb2.setChecked(false);
      }
      if (buttonView.getId() == R.id.radBtnMM) {
        rb1.setChecked(false);
      }
    }
  }

RadioButton with RadioGroup示例:

我们假设您使用了RadioGroup,如下所示。

<RadioGroup
   android:layout_width="fill_parent"
   android:layout_height="90dp"
   android:layout_marginTop="58dp"
   android:weightSum="1"
   android:id="@+id/radioGroup">

   <RadioButton
      android:layout_width="wrap_content"
      android:layout_height="55dp"
      android:text="Male"
      android:id="@+id/radioButton"
      android:layout_gravity="center_horizontal"
      android:checked="false"
      android:textSize="25dp" />

   <RadioButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Female"
      android:id="@+id/radioButton2"
      android:layout_gravity="center_horizontal"
      android:checked="false"
      android:textSize="25dp"
      android:layout_weight="0.13" />
</RadioGroup>

<Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="New Button"
   android:id="@+id/button"
   android:layout_gravity="center_horizontal"
   android:layout_below="@+id/radioGroup"
   android:layout_centerHorizontal="true" />

然后你可以像To这样简单地处理Toast中的选择和显示选择,

public class MainActivity extends Activity {
   private RadioGroup radioSexGroup;
   private RadioButton radioSexButton;
   private Button btnDisplay;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      radioSexGroup=(RadioGroup)findViewById(R.id.radioGroup);

      btnDisplay=(Button)findViewById(R.id.button);

      btnDisplay.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            int selectedId=radioSexGroup.getCheckedRadioButtonId();
            radioSexButton=(RadioButton)findViewById(selectedId);
            Toast.makeText(MainActivity.this,radioSexButton.getText(),Toast.LENGTH_SHORT).show();
         }
      });
   }

答案 1 :(得分:0)

RadioButton可以在没有RadioGroup的情况下使用。 RadioGroup只是RadioButton周围的帮助包装,为您提供一些功能,例如,如果您选择RadioButton,,则该组中的所有其他RadioButton将自动取消选中。如果没有RadioGroup,那么你必须自己实现这些功能。

答案 2 :(得分:0)

                val checkBoxes = arrayOfNulls<RadioButton>(7)
                checkBoxes[0] = findViewById(R.id.chip1)
                checkBoxes[1] = findViewById(R.id.chip2)
                checkBoxes[2] = findViewById(R.id.chip3)
                checkBoxes[3] = findViewById(R.id.chip4)
                checkBoxes[4] = findViewById(R.id.chip5)
                checkBoxes[5] = findViewById(R.id.chip6)
                checkBoxes[6] = findViewById(R.id.chip7)

                for (i in 0..6) {
                    checkBoxes[i]?.setOnClickListener(View.OnClickListener {
                        for (ii in 0..6) {
                            checkBoxes[ii]?.isChecked = false

                        }
                        checkBoxes[i]!!.isChecked = true
                    })
                }

答案 3 :(得分:0)

我已经在下面创建了解决方案来处理此问题,因为我已经使用ConstraintLayout创建了布局,但无法处理RadioGroup的RadioButtons。 CustomRadioGroup本身正在处理isChecked状态,您可以通过调用setButtonAsChecked方法来设置检查状态。

我添加了HashMap,因为您可能需要处理每个RadioButton代表的值。

class CustomRadioGroup<ID, RB : RadioButton> constructor(
    private val radioButtons: HashMap<ID, RB>,
    private val listener: ((ID) -> Unit)?) {

    init {
        for (id in radioButtons.keys) {
            radioButtons[id]?.setOnCheckedChangeListener(CheckListener(id))
        }
    }

    fun setButtonAsChecked(checkedButtonId: ID) {
        for (id in radioButtons.keys) {
            val radioButton = radioButtons[id]
            radioButton?.setOnCheckedChangeListener(null)
            radioButton?.isChecked = id == checkedButtonId
            radioButton?.setOnCheckedChangeListener(CheckListener(id))
        }
    }

    private inner class CheckListener(private val id: ID) : CompoundButton.OnCheckedChangeListener {

        override fun onCheckedChanged(buttonView: CompoundButton?, isChecked: Boolean) {
            listener?.invoke(id)
            setButtonAsChecked(id)
        }

    }
}
相关问题