自定义可勾选的ListView
来源:互联网 发布:点手机域名注册局 编辑:程序博客网 时间:2024/06/11 18:17
在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
- div 弹出层 可关闭 可移动 效果很炫
- 程序员英语1
- 在jsp中 混合使用jstl标签.
- 批处理操作注册表教程(下)
- OK6410搭建NFS下载文件系统
- 自定义可勾选的ListView
- 操作注册表的批处理代码
- 【笔试与面试】顶点软件
- 程序员英语2
- 24套精美的社交媒体图标素材设计案例
- Android Activity的启动模式(android:launchMode)
- Android中获取联系人的名字和号码
- 在Watir中运用xpath初级篇
- dell服务器如何恢复掉线硬盘阵列