博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多选按钮(CheckBox)——Mars Android开发视频教程之第一季第九集(重)
阅读量:6264 次
发布时间:2019-06-22

本文共 3691 字,大约阅读时间需要 12 分钟。

hot3.png

##1· 什么是多选按钮? 像这样可以选中多个选项的按钮就叫多选按钮(CheckBox)。

输入图片说明 ##2· 如何来使用多选按钮?

###2.1· 添加多选按钮 编译器通过不同的id来区分CheckBox,因此要注意id的命名。 XML布局文件:

###2.2· 生成并获取多选按钮 JAVA代码: 首先将这些多选按钮声明为成员变量。

private CheckBox eatBox;	private CheckBox sleepBox;	private CheckBox codBox;	private CheckBox allBox;

然后找到其对应的组件ID

eatBox = (CheckBox) findViewById(R.id.eatBox);        sleepBox = (CheckBox) findViewById(R.id.sleepBox);        codBox = (CheckBox) findViewById(R.id.codBox);        allBox = (CheckBox) findViewById(R.id.allBox);

###2.3· 对多选按钮进行监听 什么时候需要监听:

当按钮被选中时; 当按钮未选中时;

老师介绍了两种监听方法:

  • 内部类实现接口OnClickListener的onClick(View view)方法;

  • 内部类实现接口OnCheckedChangeListener的onCheckedChanged(CompoundButton boxButton, boolean isChecked) 方法;

3· 两个方法最明显的区别就是传递参数不同

前者传递一个View,后者传递一个CompoundButton(它是CheckBox等拥有两种状态的抽象的父类)和一个布尔值。这个布尔值代表所点击的选项的状态。

  • onClick方法是在选项被单击的时候调用;
  • onCheckedChanged方法是在选项状态改变的时候调用;

先创建一个内部类来实现监听器接口,重写指定方法: 做法1:

class BoxOnClickListener implements OnClickListener{		public void onClick(View view) {					}    	    }

按钮只要被点击,就会执行onClick方法。 这里我们要实现的是:知道具体哪一个按钮被选中还是被取消选中。

CheckBox box = (CheckBox) view;//view向下转型为CheckBox			switch(box.getId()){//通过id来判断操作的是哪一个CheckBox				case R.id.eatBox:					if(box.isChecked()) {//通过该方法来判断CheckBox选中与否						System.out.println("eatBox is checked");					} else {						System.out.println("eatBox is unchecked");					}					break;									case R.id.sleepBox:					if(box.isChecked()) {						System.out.println("sleepBox is checked");					} else {						System.out.println("sleepBox is unchecked");					}					break;									case R.id.codBox:					if(box.isChecked()) {						System.out.println("codBox is checked");					} else {						System.out.println("codBox is unchecked");					}					break;									case R.id.allBox:					if(box.isChecked()) {						System.out.println("allBox is checked");					} else {						System.out.println("allBox is unchecked");					}					break;								}

监听器类写好之后,再创建出该类对象,最后挂接在多选按钮上就完成了:

BoxOnClickListener listener = new BoxOnClickListener();        eatBox.setOnClickListener(listener);        sleepBox.setOnClickListener(listener);        codBox.setOnClickListener(listener);        allBox.setOnClickListener(listener);

做法2: 继承的接口改为OnCheckedChangeListener。以及方法改为onCheckedChanged(CompoundButton boxButton, boolean isChecked)

class BoxOnCheckedChangeListener implements OnCheckedChangeListener {	@Override	public void onCheckedChanged(CompoundButton boxButton, boolean isChecked) {		       }}

原来的通过box.isCheckde来判断选中与否,现在就可以用isChecked来代替:

case R.id.eatBox:				if(isChecked){					System.out.println("eatBox is checked");				} else {					System.out.println("eatBox is unchecked");				}				break;

最后创建见监听器类对象,并挂接上就完成了:

BoxOnCheckedChangeListener listener = new BoxOnCheckedChangeListener();        eatBox.setOnCheckedChangeListener(listener);        sleepBox.setOnCheckedChangeListener(listener);        codBox.setOnCheckedChangeListener(listener);        allBox.setOnCheckedChangeListener(listener);

##4· 课后练习 ###4.1· 实现全选 通过CheckBox的setChecked(Boolean)方法来实现:

case R.id.allBox:				eatBox.setChecked(isChecked);				sleepBox.setChecked(isChecked);				codBox.setChecked(isChecked);				break;

###4.2· 练习要注意的地方

  • 当每个选项都被选中时,全选按钮也应自动被选中:
if(eatBox.isChecked() && sleepBox.isChecked() && codBox.isChecked()) {			allBox.setChecked(true);		} else {...}
  • 当每个选项都被选中时(包括全选按钮),取消除全选按外的任意一个选项时,全选按钮也应自动取消:
else {//因为在取消全选按钮的时候,会把每个选项都取消掉,所以要用一个临时变量来保持取消前的状态。			boolean eatTemp = eatBox.isChecked();			boolean sleepTemp = sleepBox.isChecked();			boolean codTemp = codBox.isChecked();						allBox.setChecked(false);			eatBox.setChecked(eatTemp);			sleepBox.setChecked(sleepTemp);			codBox.setChecked(codTemp);		}

完毕

转载于:https://my.oschina.net/u/2437172/blog/493581

你可能感兴趣的文章
水晶报表的5种表格设计模式(转)
查看>>
.Net与设计模式之笔记一
查看>>
图片裁剪 PhotoCropper
查看>>
Android : Must Override a Superclass Method
查看>>
《现代教育技术》Win8版发布 && 项目总结
查看>>
绘制摆线
查看>>
c语言-操作系统实验案例
查看>>
全球首发----Tech·Ed 2006中国 实况报道。全程跟踪。(一)
查看>>
无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块
查看>>
ASP.NET MVC随想录——创建自定义的Middleware中间件
查看>>
树莓派FM广播点歌系统
查看>>
linux 格式化硬盘
查看>>
nodejs02---demo
查看>>
java21 封装Response:
查看>>
[C#]richtextbox实现行号
查看>>
无人车路测在北京or去加州?不比不知道
查看>>
Windows Embedded Standard的U盘启动
查看>>
Eclipse 反编译插件JadClipse安装
查看>>
JS判断数字字母中文
查看>>
说说设计模式~观察者模式(Observer)
查看>>