Android进阶:ListView深入学习 choiceMode使用

系统 2371 0

首先看效果图:

Android进阶:ListView深入学习 choiceMode使用及自定义Adapter Android进阶:ListView深入学习 choiceMode使用及自定义Adapter

这个是多选模式的

首先看Layout配置文件

其中的android:choiceMode="multipleChoice"选项就是设置选择模式的,

他包括几个选择 CHOICE_MODE_MULTIPLE(多选), CHOICE_MODE_NONE(默认), CHOICE_MODE_SINGLE(单选)

这里还设置了divider

下面看代码

通过android已定义的ArrayAdapter来显示数据,效果如图,

里面添加了三个事件:

1、OnTouchListener 这里通过触摸点来定位这个list的position信息,包括两个方法 pointToPosition和pointToRowId,注意这两个方法的不同点,就是在状态为-1的数据是否计算的区别

2、OnItemClickListener 这里获得当前选择的条目 通过方法getCheckItemIds来获得

3、Button的点击,这里动态增加一条数据项,可以发现通过 getCheckItemIds来标记的选择项是通过位置来记录的,跟选择选项的内容无关,所以这里如果数据是动态的就要 需要注意

还有一个问题,刚开始我

new ArrayAdapter<String>(ListViewDemo2.this,android.R.layout.simple_list_item_multiple_choice,list);

这里构造方法传入的是一个数组, 这样就发现了一个问题:

在我点击button当然是数组数据增加一条,但是发现list中的数据没有变化,

这个是为什么呢,难道是传入的集合跟 ArrayAdapter中的集合不是同一个引用,那又发现了 ArrayAdapter中有add和insert方法,但用了之后发现有 java.lang.UnsupportedOperationException这个异常,android居然还没实现,真是奇怪啊,

后来详细看了下 ArrayAdapter这个类的构造方法,原来传入list跟数据操作不同,如果是list直接用该引用,如果传入数组,就会通过Arrays.asList()来创造一个新List 这个区别就太大了, 后来只能把数组改成List 真是郁闷啊

这里使用的是 ArrayAdapter ,那很多时候我们需要自定义Adater的,可能会处于数据处理,效率优化的考虑,

如果自定义Adapter如下

这样定义显示的时候就会发现多选按钮框不见了,看 ArrayAdapter的实现就会发现,他所用的 android.R.layout.simple_list_item_multiple_choice布局用的是CheckedTextView组件

所以这里如果用TextVew就不会显示选择提示框,其实这个组件就是TextView的子类

这里我们要用这个组件

这样就正确显示了

Android进阶:ListView深入学习 choiceMode使用及自定义Adapter


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论