##1· 什么是单选按钮(RadioButton)? 这样的按钮就叫单选按钮,这里有两组单选按钮; 一组单选按钮中,只能有一个选项被选中;
##2· RadioGroup与RadioButton RadioGroup代表组;RadioButton代表单选按钮项;
##3· 单选按钮的使用
<RadioGroup>包围<RadioButton>,一对<RadioGroup/>代表一组单选按钮。
首先在布局文件中添加一对组标签:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"><!-- 选项的排列方向 -->
</RadioGroup>
然后在组标签中添加子标签:
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radioButton_A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"/>
<RadioButton
android:id="@+id/radioButton_B"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"/>
</RadioGroup>
这样就成功声明了一组单选按钮。
接着在java代码中获取对应的对象
先声明成员变量:
private RadioGroup radioGroup;
private RadioButton radioButton_A;
private RadioButton radioButton_B;
然后找到它们:
radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
radioButton_A = (RadioButton) findViewById(R.id.radioButton_A);
radioButton_B = (RadioButton) findViewById(R.id.radioButton_B);
###3.1 单选按钮的监听 我们想知道用户点击的是哪一个选项,所以最后就需要对其进行监听。
首先创建监听类 这里要注意,如果对组进行监听,那么就得导入RadioGourp包中的接口OnCheckedChangeListener:
class RadioGroupCheckedChangeListener implements OnCheckedChangeListener{
public void onCheckedChanged(RadioGroup group, int checkedId) {
}
}
最后生成监听类对象,将监听器挂接在RadioGroup对象上:
RadioGroupCheckedChangeListener raidoListener = new RadioGroupCheckedChangeListener();
radioGroup.setOnCheckedChangeListener(raidoListener);
这样,radioGroup组中的任意选项状态改变时,就会调用onCheckedChanged(RadioGroup group, int checkedId)方法。
- group代表状态改变的选项所在组。
- checkedId代表状态改变的选项ID。
现在我们可以写一些打印语句。 例如,打印状态改变按钮的内容。那么我们要在onCheckedChanged方法中进行实现:
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId == radioButton_A.getId()){
System.out.println("A");
} else if(checkedId == radioButton_B.getId()) {
System.out.println("B");
}
}
除了对组进行监听之外,我们还可以给单独一个项进行监听:
定义一个监听类,注意,这里实现的onCheckedChangeListener接口是CompoundButton包中的接口:
class RadioButtonCheckedChangeListener implements CompoundButton.OnCheckedChangeListener{
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
}
}
接着,创建监听类对象,然后将监听器挂接在要监听的RadioButton对象上:
RadioButtonCheckedChangeListener radiotButtonListener = new RadioButtonCheckedChangeListener();
radioButton_A.setOnCheckedChangeListener(radiotButtonListener);
这样,当这个对象的状态改变时就会调用onCheckedChanged(CompoundButton button, boolean isChecked)方法
- button是被监听的RadioButton对象;
- isChecked为是否选中。
写个打印语句来测试一下,显示被监听按钮的状态:
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
if(isChecked){
System.out.println(button.getText() + "被选中了");
} else {
System.out.println(button.getText() + "没有被选中");
}
}
##4· 疑问 我就在想,单独监听一个单选按钮有什么用呢? 无非就是,知道这个按钮是处于选中还是未选中状态而已嘛。 而这通过组监听也完全能实现啊,当选中的项不是目标项时,就代表它未选中,反之亦然。
##5· 总结
- 单选按钮由组(RadioGroup)和项(RadioButton)所构成;
- 使用的时候,先添加组标签,然后再往里面添加子标签;
- 一组单选按钮中只能存在一个选中项;
- 监听组(RadioGroup)使用监听器RadioGroup.OnCheckedChangeListener;
- 监听单独一个项使用CompoundButton.OnCheckedChangeListener
##6· 练习 实现: 两组单选按钮 1:A、B 2:C、D 点击A的时候C也被选中;点击B的时候也被D选中。
实现:
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId == radioButton_A.getId()){
radioButton_C.setChecked(true);
} else if(checkedId == radioButton_B.getId()) {
radioButton_D.setChecked(true);
}
}
这个练习的用意应该是让我们知道setChecked()这个方法的作用吧。
完毕
来源:oschina
链接:https://my.oschina.net/u/2437172/blog/493877