2018-03-27—ListView实现商城全选及取消逻辑

我们之前用过ListView实现过QQ消息列表,今天我们来用ListView实现一下商城购物车列表,这个跟QQ其实差不多只是我们这次item中的控件除了ImageView和TextView之外,又多了一个多选框(CheckBox)。


相信大家都用过京东淘宝,当我们想要删除购物车里的全部东西,而东西又很多的时候,我们会点击全选按钮,然后点击删除,除此之外还有点击单个条目的勾选框然后删除的功能。话不多说,我们现在开始。

1.先创建一个listView的条目布局


很简单的一个条目,分别指定三个控件的id(从左到右)item_checkbox、item_pic、item_name

2.然后在activity.xml中添加一个ListView的标签。id指定为mLv(简单粗暴)

3.添加适配器。我们创建一个MyListAdapter,继承BaseAdapter。


创建的同时我们在里面传入了两个参数,上下文和数据源。List中的类型为我们自定义的商品类型。然后我们创建一个Goods的类。


数据类

创建了Goods类并添加了需要的属性和对应需要的方法。

我们接着改写我们的适配器。

重写四个方法应该大家都知道了,这里getView我直接用Viewholder了。


getView方法的重写

4.现在适配器也写完了,我们就可以在活动中添加数据了。

我们在bean方法里添加了20个假数据。然后传入mList,最后给ListView添加适配器。现在我们来跑一下。


有点丑是吧,不过不要紧,今天我们不管他丑不丑,我们只想实现他的功能。

我们现在点击每个条目最左侧的复选框,是可以点击的对吧,但是我们点完了往上拉再拉下来,你会发现刚才点的钩没了,这是因为我们刚才只是让这个控件成为选中状态,但是在数据中我们的数据还是默认的false(未选中状态)。

而更改数据有两种方法:用点击事件(onClickListener)和改变时间(onItemChangeListener)我们一种一种方法实现:

1.onClickListener实现:

        我们先想一下数据拉上去钩显示的原因:是因为我们再拉上去他又进入了getView方法,也就是每次加载都是进入getView方法里,所以我们要在getView方法里面添加点击事件。


仔细看我写的逻辑,我们在getView中添加了holder存储的CheckBox控件的点击事件。在点击后,如果对应position的数据中是未选中状态(存储的是false),则把它改成true,不是的话相反。现在我们再点击后下拉,会发现拉上去以后钩还是钩,没有消失。

2.通过setOnCheckedChangeListener实现:


(大家注意我写的顺序,先实现了监听器,之后才给holder添加了数据,具体原因很复杂,,,跟listView的复用机制和一些其他原因有关。以后有机会再说)

这个逻辑看着就更简单了,我们在进入了onCheckChanged方法后,他传入了一个isChecked参数,这个参数是我们点击了以后他改变了的值,也就是说如果之前我们没选中,值应该是false,而点击了以后它就是true,这个跟上面不太一样,


好了,现在单选我们就已经完成了,而且可以成功的保存数据,下面我们来完成删除和全选功能:

首先在activity.xml中添加两个按钮,用作删除和全选按钮。

好了,然后我们实现这两个按钮的点击事件。(大家都会,这里就不写了)我们主要看事件里面的是实现逻辑:

我们全选通过对数据源进行遍历,然后把每个对象的属性都改成true,最后调用一个adapter的notifydatachanged方法就好了。

而删除我们同样是遍历数据源,然后将属性为true的添加到一个新的List集合中,之后调用removeAll方法删除,最后调用一个adapter的notifydatachanged方法。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容