【Android学习笔记】RadioGroup,RadioButton的使用&CheckBox的使用
来源:互联网 发布:淘宝如何开店铺步骤 编辑:程序博客网 时间:2024/05/17 23:54
单选按钮radio例子:
RadioButton应该定义在RadioGroup中,组中只能选一个
跟html中
<input type="radio" name="gender" value="female"/>女
<input type="radio" name="gender" value="male"/>男
是一样的
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RadioGroup android:id="@+id/genderGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <RadioButton android:id="@+id/femaleButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/female" /> <RadioButton android:id="@+id/maleButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/male" /> </RadioGroup> </LinearLayout>
取得Radio的值例子:
public class RadioActivity extends Activity {private RadioButton femaleButton;private RadioButton maleButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.radio);RadioGroup genderGroup=(RadioGroup) findViewById(R.id.genderGroup);femaleButton=(RadioButton) findViewById(R.id.femaleButton);maleButton=(RadioButton) findViewById(R.id.maleButton);//给RadioGroup添加一个监听器,监听值的变化genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if(checkedId==femaleButton.getId()){Toast.makeText(getApplicationContext(), "female", 1).show();}else if(checkedId==maleButton.getId()){Toast.makeText(getApplicationContext(), "male", 1).show();}}});}}
<CheckBox android:id="@+id/swim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/swim" /> <CheckBox android:id="@+id/run" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/run" /> <CheckBox android:id="@+id/read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/read" />
得到复选按钮选中的值
public class CheckBoxActivity extends Activity {private CheckBox swimBox;private CheckBox runBox;private CheckBox readBox;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.radio);swimBox=(CheckBox) findViewById(R.id.swim);runBox=(CheckBox) findViewById(R.id.run);readBox=(CheckBox) findViewById(R.id.read);//给各个CheckBox 设置监听器swimBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){Toast.makeText(getApplicationContext(), "swim", 1).show();}}});runBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){Toast.makeText(getApplicationContext(), "run", 1).show();}}});readBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){Toast.makeText(getApplicationContext(), "read", 1).show();}}});}}
关于mars视频上,mars提出的对CompoundButton.OnCheckedChangeListener和RadioGroup.OnCheckedChangeListener两个接口为什么不合并的问题
我提一些自己的观点
我认为这两个接口本来就不应该合并,原因如下
根据文档,我们可以看出CompoundButton是CheckBox和RadioBox的父类,而RadioGroup的直接父类居然是LinearLayout
RadioGroup从父类继承的字段有HORIZENAL,VERTICAL
从父类继承的方法有setGravity(),setOrientation()等等
于是可以认为RadioGroup就是一个嵌套在外层Layout中的Layout
而RadioGroup之所以能实现众多radioButton的单选问题,是因为它维护了一个mCheckedId字段 记录了现在选中的RadioButton的id(见源码)。可以料想,安卓内部是根据这个id来做radio是否选中的显示的。
正因为如此,RadioGroup.OnCheckedChangeListener中onCheckedChanged方法才是这样的:(参数是RadioGroup和checkedId)
public void onCheckedChanged(RadioGroup group, int checkedId);
这样我们就可以通过group这个参数来操作同组其他radio的的状态(比如可以group.findViewById(...) 然后调用setEnabled(false)来灰化这个按钮.或者设置所有的radio无效,等等)
总之,我想说,radiogroup中的所有的RadioButton是在组内相关的,RadioGroup维护了组内radiobutton的相关性
CompoundButton.OnCheckedChangeListener中onCheckedChanged方法是这样的:
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked);(参数是buttonView(也就是checkbox)和checkedId)
两个接口虽然同名,接口定义的方法虽然也同名,但是参数不一样,所以指示的功能不一样,所以他们是不一样的方法,所以可以认为是不一样的接口。
如果两个接口合并了,也就是RadioGroup中不定义这个Listener,而直接用RadioButton父类CompoundButton的Listener。那么RadioButton就不能得到其他radio的状态,得不到这个组的状态,和checkbox又有什么区别呢?
或许有的人要说,在checkbox的listener中也能得到其他checkbox的状态,只要通过父类View的findViewById()就行了,这样看来radiobutton如果用checkbox的监听也是可以实现单选功能的。但是在我看来,这种方案使得代码糅杂,radio的逻辑是N只能选1,这样的底层的逻辑却在实现层去做,这样的设计谁都不能接受吧。
所以我认为android设计RadioGroup是必要的,给RadioGroup定义一个属于自己、满足radio单选功能的内部监听接口也是必要的。
综上:CompoundButton的OnCheckedChangeListener只是碰巧和RadioGroup的OnCheckedChangeListener重名罢了,因为是不同的功能,所以谈不上合并
我相信这个问题肯定有更好的方法来解读~以上只是一个Android初学者的思考
- 【Android学习笔记】RadioGroup,RadioButton的使用&CheckBox的使用
- 控件RadioGroup、RadioButton和CheckBox的使用
- RadioGroup,RadioButton CheckBox控件的使用
- Android UI学习笔记 之RadioButton和CheckBox的使用
- Android自学笔记之RadioGroup和RadioButton的使用
- 雾山的Anrdoid学习笔记---CheckBox,RadioGroup&RadioButton
- 雾山的Anrdoid学习笔记---CheckBox,RadioGroup&RadioButton .
- Android PopupWindow RadioGroup RadioButton 的使用
- Android—RadioGroup和RadioButton的使用
- (转)android常用控件(二) RadioGroup RadioButton CheckBox Toast的使用
- RadioButton和RadioGroup的使用
- android学习笔记之RadioGroup的使用
- Android学习笔记——EditText、RadioGroup、CheckBox和Spinner的使用。
- RadioButton和CheckBox的区别,RadioButton&RadioGroup
- Android--CheckBox复选框、RadioGroup和RadioButton及其使用
- Android学习笔记17:单项选择RadioButton和多项选择CheckBox的使用
- android中checkbox和radiobutton的使用
- android radiobutton和checkbox的使用
- 电脑好卡啊系统的问题吗
- 刀塔传奇》付费设计分析
- 多线程与多核处理器 SMP 分析
- UIView 在自定义的时候可以重写的方法
- opencv中的CV_LOAD_IMAGE_GRAYSCALE与WINDOW_AUTOSIZE
- 【Android学习笔记】RadioGroup,RadioButton的使用&CheckBox的使用
- vs2008+Qt4.6.4中文显示乱码问题
- 为甚毛网速这么差啊卡的电脑也不行了
- 正则表达式:Pattern类与Matcher类详解(转)
- codeigniter源代码分析 - 性能分析类 Benchmark.php
- IOS开发 从子线程进入主线程
- ExtJS基本控件
- Liunx Crontab 定时的逻辑
- HUST 1017 Exact cover 解题报告(Dancing Link)