1.多选按钮(Check Box)的基本概念
- 提供一系列的选项,给用户去选择
使用多选框(Check Box)的方法步骤:
1.在XML文件当中使用<CheckBox/>标签
2.在代码当中使用CheckBox的对象标签表示
3.为CheckBox设置监听器,两种方法:1.常用的为:OnClickListener监听器 2. OnCheckChangeListener监听器
我们用例子来演示:
- 创建一个Android 应用程序,命名为:S04_CheckBox
- 在XML文件当中使用<CheckBox/>标签,线性垂直布局,创建三个标签:吃饭、睡觉、看书
- 在代码当中使用CheckBox的对象标签表示,在MainActivity当中,获取代表CheckBox控件的对象
- 为一个控件绑定监听器,以监控控件的行为,详细方法,链接:点我跳转
- 创建一个内部类OnBoxClickListener去实现OnClickListener接口,然后复写onClick()方法,接着生成OnBoxClickListener类的对象,接下来把多选框的点击行为绑定到OnBoxClickListener类的对象,一旦多选框中的哪一个被选中都会执行OnBoxClickListener类的Onclick( )方法:
- 现在的问题是无论是哪一个多选框被选中或者取消都会调用onClick方法,输出:“CheckBox is clicked” 我们希望能区分是哪个被选中,和未被选中的状态。
- 我们需要去解决的问题:是哪个多选框被点击,是选中还是取消;
- 为了更加直观,我在布局文件加了三个TextView控件,用来显示CheckBox被勾选的状态:
然后在MainActivity当中,获取代表TextView控件的对象 :
效果如下:
- 我们可以发现onClick(View view)方法是有传进去一个参数的,这个参数传进去的参数就是被选中或取消选中的CheckBox对象,因为CheckBox是View的子类,所以可以传入:
- 而View有一个方法是得到对象的id,我们知道,我们在布局文件创建CheckBox都为其添加了这个ID,我们只需打印这个Id和R.java文件的id进行对比我们就知道,当哪个CheckBox点击,传入的就是哪个CheckBox对象的ID.
- 既然这样我们就可以通过判断CheckBox对象的Id,就可以知道是哪个多选框被按下了?
- 那如何知道被选中还是取消选中呢?
- 因为CheckBox对象有一个方法:isCheck( )方法,如果被按下函数返回真,否则返回假,因为是CheckBox对象的方法,所以我们需要把它向下转型为CheckBox类型。
- 我们修改onClick(View view )根据传入的参数判断,哪个被选中或者取消选中:
- 我们上面已经把id打印出来了,我们看看,当我们只选中吃饭的时候打印出来的ID,和R.java里面吃饭的ID是否匹配:
可以发现在R.java里面的ID是一样的 ,这样我们就知道了,多选框可以通过去判断Id去区分哪个CheckBox对象,然后用CheckBox对象的isCheck方法判断CheckBox对象(一个多选框)的状态。
接下类我们再去实现OnCheckChangeListener接口(前面实现的是OnClickListener)
- 首先和前面的一样去实现这个接口,只是复写的函数和功能不一样,这个函数有两个参数,具体如下:
注意需要导入包:
然后绑定监听器:
和刚才实现的功能是类似的,效果如下:
附加例子:如果需要加个全选的功能我们怎么做呢,按全选就全部选中,取消全选,就全部取消选中,效果如下图:
- 首先在布局文件增加一个TextView控件显示全选的状态,然后再增加一个全选的CheckBox控件:
- 然后在MainActivity当中,获取代表TextView控件和CheckBox控件的对象,并绑定监听器 :
- 修改OnCheckedChangeListener实现类的方法onCheckedChanged:
- 修改完成,运行程序,效果入下:
附录:
本博文Demo下载:https://github.com/zGuangYuan/Android-
github的用法:点我查看