ListView自带单选和多选的特技Choice Mode
来源:互联网 发布:哥白尼式革命 知乎 编辑:程序博客网 时间:2024/05/18 01:07
ListView
本身带有单选和多选功能,也就是说在单选模式下,它能够记住当前选中的唯一的列表项;在多选模式下,它能够记住目前选取的所有的列表项。
这种选择模式共有4种CHOICE_MODE_NONE
CHOICE_MODE_SINGLE
CHOICE_MODE_MULTIPLE
CHOICE_MODE_MULTIPLE_MODAL
。
使用setChoiceMode()
函数,就可以设置ListView
的选择模式。
- 1
- 2
- 1
- 2
9.4.1 CHOICE_MODE_NONE
这是ListView
默认的选择模式,当使用者点击列表项后,不会将任何点击的列表项当成被选择上的列表项。
9.4.2 CHOICE_MODE_SINGLE
使用这个选项模式,当使用者点击列表项后,会将最后一次点击的列表项当成被选择上的列表项。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
每次点击列表项,可以在它的监听函数中得知哪个列表项被点击了,
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
以后就可以通过ListView
的getCheckedItemPositions()
获取被选中的数据项的位置列表,
- 1
- 1
例如,当列表项按照序号为3->2->1-7
的顺序被点击后,7
将被记录下来,作为当前被选中的数据项。调用getCheckedItemPositions()
后,将得到一个键值对,里面只会记录,
- 1
- 1
这里为了看到被选中的效果,采用了Android SDK提供的android.R.layout.simple_list_item_single_choice
布局,作为列表项的布局。
9.4.3 CHOICE_MODE_MULTIPLE
使用这个选项模式,当使用者点击列表项后,会将所有点击的列表项当成被选择上的列表项。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
每次点击列表项,可以在它的监听函数中得知哪个列表项被点击了,
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
通过ListView
的getCheckedItemPositions()
获取被选中的数据项的位置列表,
- 1
- 1
例如,当列表项按照序号为3->2->1->7
的顺序被点击后,3 2 1 7
将被记录下来,作为当前被选中的数据项。调用getCheckedItemPositions()
后,将得到一个个键值对,里面会记录,
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
这些记录,将按照列表项的位置从小到大排列。
如果用户在已经被选上的数据项上,又再次点击,这将取消对它的选择。例如,当列表项按照序号为3->2->1->7->2->1
的顺序被点击后,就变成了,
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
对于被取消了选择的列表项,并不会从记录中移除,而是改变它的值成false
。
这里为了看到被选中的效果,采用了Android SDK提供的android.R.layout.simple_list_item_multiple_choice
布局,作为列表项的布局。
9.4.4 CHOICE_MODE_MULTIPLE_MODAL
在CHOICE_MODE_MULTIPLE_MODAL
模式中,用户必须通过长按任意一个列表项,进入多选模式,否则不能进行多选。
这个模式的使用与CHOICE_MODE_MULTIPLE
类似,不过它需要设置一个ActionMode
,这样才能在长按列表项后,改变ActionBar
的菜单栏,打开多选的菜单。
实现
ListView
的MultiChoiceModeListener
接口,- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
使用创建的接口,传递给
ListView
,- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在CHOICE_MODE_MULTIPLE_MODAL
模式下,对列表项的点击,是在ListView.MultiChoiceModeListener
的onItemCheckedStateChanged()
函数中响应的。
这里为了看到被选中的效果,采用了Android SDK提供的android.R.layout.simple_list_item_multiple_choice
布局,作为列表项的布局。
9.4.5 关于单选和多选的状态背景
前面的演示中,分别对不同的选择模式,使用了不同的数据项布局,
- 1
- 2
- 3
- 1
- 2
- 3
我们也可以选择自己的布局来实现。但是不管使用什么布局,我们都希望被选上的列表项有特别的效果,和其他没有被选上的数据项区别开。这里有两种方案,
使用实现了
Clickable
接口的控件或者布局,作为数据项的布局。例如前面我们使用的android.R.layout.simple_list_item_multiple_choice
android.R.layout.simple_list_item_single_choice
等,它们本身就是CheckedTextView
。当点击它们的时候,它们就自带了勾选框,可以看到效果。所以,可以选择
CheckBox
Switch
这类同样实现了Clickable
接口的布局来表现;也可以自定义一个实现了Clickable
接口的布局。这里用android.R.layout.simple_list_item_multiple_choice
的实现来举个例子,- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
给数据项的布局使用一个
Selector
,告诉这个布局,当它被activated
以后要怎么显示。比如,定义一个布局custom_item_layout.xml
,- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
给这个布局设计一个
selector
,增加对android:activated
属性的设置,- 1
- 2
- 3
- 1
- 2
- 3
使用这个这个布局,
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
当我们多选的时候,那些选中项,就变成黄色,看到如下的界面,
- ListView自带单选和多选的特技Choice Mode
- ListView自带单选和多选的特技Choice Mode
- ListView的Choice模式
- listview自带的单选和多选
- Multiple choice listview in Android
- listview 的 selection mode 训练小例子
- IA mode和windows mode的比较
- Django之Mode的外键自关联和引用未定义的Model
- Choice的用法
- ListView去掉自带的线条和滚动条
- PV3d特技--飞动的文字
- 高并发的限流特技
- scala语言的一些特技
- CHOICE
- Choice
- choice
- 浅谈ListView自带的滚动条和ScrollView中嵌套ListView的区别
- 用ListView自带的多选模式完成多选功能
- 类的继承与派生中关于构造函数
- python lambda 表达式使用
- 二叉树结构字符串转为数组控制台输出二叉树
- init子进程
- DEDECMS之唯一登录,踢人效果
- ListView自带单选和多选的特技Choice Mode
- ionic添加cordova-plugin-camera拍照插件后build报错
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- java中exception的printStackTrace()输出内容转成字符串
- Elasticsearch 5.1.1 Embedded Mode
- was mutated while being enumerated
- Flask框架的学习与实战(三):登陆管理
- Sql小白入门(三)管理数据库对象
- 常用的优秀开源项目