您的位置:首页 > 移动开发 > Android开发

[置顶] Android 基于RecyclerView实现批量操作

2016-09-07 21:15 387 查看
不知道大家对淘宝,JD的App购物车有木有印象,购物车中的多个商品可以批量删除,支付,分享等等。。先来看张图,该图来自水友截图:



上图来自淘宝购物车界面。可以看到,我们对商品可以进行批量删除,移到收藏夹,分享功能。ok,今天我们就用RecyclerView来实现类似批量更新的操作。

首先,我们来简单分析下要实现这样的功能,有哪些核心点:

(1)标示选中的商品,即RecyclerView中的Item。

(2)将选中的多个商品进行保存。

(3)对保存的商品进行批量操作,例如,删除。

(4)更新列表显示最新数据。

上面4步中有难度的地方估计就是对选中的内容进行保存,以及如何标示被选中的内容。

来看我们今天要实现的界面:



(1)长按Item底部滑出操作菜单,Item被选中。

(2)点击Item的checkbox选中后,点击删除或全选进行批量操作。

(3)在列表中的Item有checkbox,大家还需要注意RecyclerView复用导致的多选问题。解决方案我给大家列举两种:

           1> 在Item对应的实体类中添加一个flag变量来标示是否被选中,然后在生成Item的方法中根据该值来设置checkbox是否被选中。

           2> 使用一个集合来保存当前选中的Item的Position。然后根据判断集合中是否有Position来决定checkbox是否被选中。

大致的实现流程就是这些,下面来看具体的核心代码:

(1)RecyclerView的数据适配器:





代码很简单,就是对Item的根据局添加了单击,长按,checkbox的单击事件,利用接口回调将事件传递到Activity主界面。可以看到在checkbox的单击事件中,我们根据当前checkbox的选中状态对实体类的isSelect进行赋值,保存下当前的状态,避免复用带来的多选问题。

(2)实体类:



(3)处理点击事件:



上面代码中核心代码在checkbox的点击回调事件中:checkBoxClick:

下面来看addOrRemove方法:



该方法中我们使用HashSet类型的positionSet变量保存选中的Item的Position。即点击checkbox分两种状态:选中,取消选中。即分别对应了选中将position添加到positionSet集合和取消选中将对应的Position从positionSet中删除。最后当positionSet的集合为0时,即最后一个Item取消选中,下面的菜单开启动画隐藏。

(4)删除操作:



相信大家都知道什么意思了,很简单,就是对集合中的数据进行操作,将positionSet集合中保存的Postion对应的数据取出,然后从数据集合中删除对应数据,调用notifyDataSetChanged方法来更新列表。最后别忘记清空positionSet集合(代表了本次删除的操作结束)。

(5)全选:



当Item没有全选时,点击全选,Item被全部选中。反之,取消全选。很简单,相信大家一看就明白,不多说了。

到此,基本上对于RecyclerView的批量删除,全选操作功能就全部实现了,基本的核心点就是对集合数据的删除,以及使用一个标示来标志该项的选中状态。

好了,今天的内容就到这里啦~有问题的朋友可以留言。
源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐