qt如何实现backspace的功能_如何实现知识星球列表拖拽功能

本 篇讲解一下如何实现在知识星球中星球列表的拖拽,各位可能都知道,我创建了一个星球【Hi Android】,所以最近使用这个软件比较多,之前也写过关于这个软件如何生成分享卡的文章,就是那篇文章有小伙伴建议我写一个星球的App,我也寻思着写一个吧,于是就开始着手去写了,这个软件还是比较简洁的,但是现在还没有写完,所以我想先一个功能一个功能的去讲解,今天要实现的是他的星球列表拖拽功能,我们来看下效果:

5c51abc607ba8fa6361e3871ef35bfa1.png

可以看到,要想实现这个功能,需要大致的分为三个要求:

  • 1.下拉刷新
  • 2.拖拽排序
  • 3.不能拖拽最后的Item

有了这三个要求之后,我们就可以着手来实现了,首先,我们要实现这个列表,这个比较简单,我们使用RecyclerView即可实现,但是这里应该是多个Item,所以我们需要多Type来做,这里来看下我们的适配器的代码:

132b24ed610ee1a03b2cfc440ea56b68.png

这是一个很标准的RecyclerView适配器的Adapter,我定义了两个Type来区别对待普通的item和最后的item,接着我就可以模拟一点数据了:

b3f76b940ee372a9fb151d6979aed4ea.png

数据和适配器都有了,我们就可以运行来看下效果了:

3dda5cf1997cf0540322b27186338921.png

到这里我们的基本样式算是实现了,紧接着,我们需要拖拽,拖拽比较简单,我们可以用ItemTouchHelper来实现,ItemTouchHelper的callback中,我们需要实现如下的方法:

  • getMovementFlags 根据布局管理器控制拖拽方向
  • onMove 移动并计算排序
  • isLongPressDragEnabled 是否支持长按拖拽
  • onSelectedChanged 选中的item改变
  • clearView 松手改变状态

了解了这些之后我们就可以来实现代码了:

4f79cb5be4fcbcdf93b8b811992d871e.png

在这段代码中我会详细给大家介绍,首先是getMovementFlags,其实很简单,我获取到你当前的布局管理器,如果是LinearLayoutManager,那么只支持上下,如果是GridLayoutManager,那么上下左右都是可以拖拽的,接着来看onMove,这个是关键的方法,里面获取到拖拽前后的对象,这里我直接判断你拖拽移动的对象是否是最后一个,如果是,那么就不进行交换,如果不是,继续往下走,最后刷新适配器,就能实现拖拽移动了,onSelectedChanged,这个只是选中改变的回调,我们启动震动效果就好了,ok,先来基本的效果都已经实现了,至于下拉刷新,我直接使用了一个SwipeRefreshLayout来实现的,就不多说了,来运行看下效果:

b79c23e781df10443c87fb2016ddd587.png

有兴趣可以加入我的星球:Hi Android , 里面可都是我手撸的新鲜文章,高质量你值得拥有!

进入星球你可以做什么?

1.我的所有视频可以观看

2.发布提问贴可以得到满意的答案

3.可指定我写你感兴趣的技术文章

4.初学者可配套视频辅导

5.有机会线下交流聚会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值