带checkBox的ListView全选和取消。
来源:互联网 发布:什么手机支持联通4g网络 编辑:程序博客网 时间:2024/05/19 12:15
今天的需求是,一个带有checkBox的listView列表,通过点击全选,listView中每一个Item的checkBox项都选择上,反之,则取消全部。
思路: listView是负责show数据的,所以我们尽量不在数据适配器里操作数据。因为全选或者取消全选,单独选择一个或者多个都是操作数据,我们可以专门为这组数据准备个容器。选择了一条数据就往容器里添加一条,选择了全部就全部添加进去,若取消选择,就把容器中的数据全部倒出去。这么做还有一个原因时,listView在展示多条数据时,选择之后再滚动发现数据状态也可以保存。
实际操作:
- 定义一个List集合,selectList,这就是那个容器。
- 全选时:将服务器返回的数据通过for循环依次add 到selectList集合里。取消全部时,调用selectList.clear()即可;
- 选择单个或者多个时,直接调用selectList的add方法;在取消单个选择时,我们只要去selectList集合里判断下有没有当前对象。
- 最后把这个selectList集合传给数据适配器就可以了,在适配器里只需要监听点击事件。
在这个需求里容易出问题的地方有以下几点:
- 如何判定当前对象是否存在于selectList集合,大家可能知道list有contains方法,也许会说这下简单了,只要通过这个方法我们就能判断了,实际上用这个方法去判断是没错的,出错的地方在contains方法,通过源码可以知道contains方法在比较两个对象时 用的是equals(),实际上equals()在比较两个字符串时效果很好,但是在这儿效果不好,两个对象比较完之后失效了,解决办法是,重写该对象的equals()方法吗,通过比较两个对象的唯一标识,例如id,返回比较结果。
- 只有全部选择了, 页面最上方的全部这个标识才能被选择。一开始我用了checkBox的setOnCheckedChangeListener来监听,后来发现我全选之后再取消某一个,最上方的全选按钮的状态没有变,还是之前的全选。解决办法时,调用onClickListener这个方法。同时在监听单个item的点击事件中,增加一个判断,就是selectList的size与list的size进行比较,相同全选按钮被选中,反之,不选。
- listView中最好不适用checkBox,因为会抢焦点(日后再分析)。解决方案时我们可以通通用ImageView来替代。
0 0
- 带checkBox的ListView全选和取消。
- 实现listview中checkbox的全选、反选和取消
- Checkbox 全选和取消全选的代码
- checkbox全选和取消全选
- checkbox 全选和取消全选
- Android带CheckBox的ListView,全选,CheckBox和ListView事件分离
- js checkbox全选和取消的事件
- 实现全选和取消全选(JavaScript控制CheckBox 的全选与取消全选)
- checkbox的全选和取消全选按钮的js
- js实现简单的checkbox全选和取消全选效果
- datagridview里面的checkbox全选和取消全选
- jQuery最简单的checkbox全选和取消全选
- JS实现checkbox的全选和取消全选
- ListView + CheckBox (全选,反选,取消)
- JQuery实现checkbox全选和取消全选
- checkbox全选,反选和取消全选
- C#中使用listview的checkBoxs全选和取消全选
- CheckBox的全选、取消、删除
- scala数据结构和算法-01-用scala实现合并排序
- 数据结构课程设计-图书管理系统
- tensorflow使用GPU训练时的显存占用问题
- sql优化
- 仿开源的csdn项目做的一个模块
- 带checkBox的ListView全选和取消。
- ui的粒子特效的层级问题
- jvm与Native Method
- 活动图
- Matlab导出eps或jpg图片的N种方法(很全哦)
- java String学习
- Java基础知识总结
- oracle10g 创建用户 授权
- kali下安装中文输入法