[置顶] 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的批量删除,全选操作功能就全部实现了,基本的核心点就是对集合数据的删除,以及使用一个标示来标志该项的选中状态。
好了,今天的内容就到这里啦~有问题的朋友可以留言。
源码下载
上图来自淘宝购物车界面。可以看到,我们对商品可以进行批量删除,移到收藏夹,分享功能。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的批量删除,全选操作功能就全部实现了,基本的核心点就是对集合数据的删除,以及使用一个标示来标志该项的选中状态。
好了,今天的内容就到这里啦~有问题的朋友可以留言。
源码下载
相关文章推荐
- Android基于RecyclerView实现高亮搜索列表
- Android使用RecyclerView实现列表数据选择操作
- Android 基于RecyclerView实现的歌词滚动自定义控件
- Android利用RecyclerView实现全选、置顶和拖拽功能示例
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
- Android基于RecyclerView实现高亮搜索列表
- Android Recyclerview实现多选,单选,全选,反选,批量删除的功能
- [置顶] Android-RecyclerView实现购物车简单功能
- [置顶] Android开发之RecyclerView实现点击事件和长按事件
- Android RecyclerView单击、长按事件标准实现:基于OnItemTouchListener + GestureDetector
- [置顶] Android开发之RecyclerView的交互动画(实现拖拽和删除)
- Android基于RecyclerView实现高亮搜索列表
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
- [置顶] Android使用RecyclerView和CardView,实现知乎日报精致布局
- Android RecyclerView单击、长按事件:基于OnItemTouchListener +GestureDetector标准实现(二),封装抽取成通用工具类
- android自定义Tabs控件,基于ScrollView+ViewPager实现。
- Android 自定义RecyclerView 实现真正的Gallery效果
- Android通过onDraw实现在View中绘图操作