自定义可勾选的ListView
来源:互联网 发布:淘宝的标志图片 编辑:程序博客网 时间:2024/06/06 14:44
在listview到item里面包含checkbox,是否遇到了选中一写条目,然后往下拖动再拖回来,选择到条目消失?
是否觉得用android.R.layout.simple_list_item_checked来作为list item的layout很方便且没有上面到问题,但是觉得那个layout无法自定义(checkbox在右边,我想放在左边)?
答案是可以的。
针对第一个问题,网上说把checkbox到状态更新到adpter的data set里面,但是完全没有必要自己去做! listview已经为我们维护了条目的选中与否的状态(特别是在推出了action bar之后,不熟悉这个场景的可以跑一下4.0下的ApiDemo里的List15.java)。这个类就是SparseBooleanArray。
“ListView就会把被选中的item项或者取消选中的item项的potion和bool值存进一个叫SparseBooleanArray的集合中,这里要注意一下,当你选中某一项的时候,他会存入,当你取消这一项的时候他会去修改这一项的bool值,将true改为false,但是并没有从这个集合中取消掉,这样通过listView的getCheckedPositions方法得到的集合中,就会包含已经取消的那一项了,这个方法并不会只返回value为true的元素”(摘自http://cnitcastsdut.blog.163.com/blog/static/1460180932010101774829201)
所以通过for (int i = 0; i < sparseBooleanArray.size(); ++i)遍历,当sparseBooleanArray.valueAt(i)==true即遇到了选中的条目时,我们可以把sparseBooleanArray.keyAt(i)的值(即选中条目的position)保存起来。用于删除条目等操作。
listview条目的选中状态还要用打勾与否的图片来显示,checkbox就正好可以用来干这事,不用自己贴图。当然摆放位置可以自己定。注意设置checkbox的android:clickable="false",并且将父layout节点设置android:descendantFocusability="blocksDescendants"属性,这样checkbox就被‘废’成indicator了。
重要的是你的自定义View要实现Checkable接口的setChecked(boolean checked)方法(这个方法会被listview反复调用)。在里面做mCheckBox.setChecked(checked)。还有ListView的setItemChecked(int position, boolean value)就相当于实现让人去点击选中和点击取消选中。
示例代码下载
- 自定义可勾选的ListView
- 自定义可勾选的ListView
- 自定义Android的ListView
- 自定义外观的ListView
- 自定义Listview的使用
- 自定义listview的布局
- 自定义ListView的Adapter
- 简单的自定义listview
- 自定义Adapter的ListView
- 自定义横向的ListView
- 自定义listview的adapter
- Listview的自定义Adapter
- 自定义adapter的listview
- 自定义ListView的高度
- ListView的自定义
- ListView的简单自定义
- 自定义ListView的Adapter
- Android中ListView的分页--自定义ListView
- 指针拷贝小例子
- DBUtils使用
- 用Android Studio 导出jar包
- PAT 1073. Scientific Notation (20)
- jQuery validator 详解/应用
- 自定义可勾选的ListView
- Enable Debug log for Requests
- 【Unity】Unity中根据角度和距离生成物体
- 【产品进阶】原型设计相关
- 如何在ABBYY PDF Transformer+中进行文本识别
- 机房收费总结篇
- PHP Array向Javascript的转化
- 一个DDOS病毒的分析(二)
- 隐藏TabBar底部的方法