qt如何实现backspace的功能_如何实现知识星球列表拖拽功能
本 篇講解一下如何實現在知識星球中星球列表的拖拽,各位可能都知道,我創建了一個星球【Hi Android】,所以最近使用這個軟件比較多,之前也寫過關于這個軟件如何生成分享卡的文章,就是那篇文章有小伙伴建議我寫一個星球的App,我也尋思著寫一個吧,于是就開始著手去寫了,這個軟件還是比較簡潔的,但是現在還沒有寫完,所以我想先一個功能一個功能的去講解,今天要實現的是他的星球列表拖拽功能,我們來看下效果:
可以看到,要想實現這個功能,需要大致的分為三個要求:
- 1.下拉刷新
- 2.拖拽排序
- 3.不能拖拽最后的Item
有了這三個要求之后,我們就可以著手來實現了,首先,我們要實現這個列表,這個比較簡單,我們使用RecyclerView即可實現,但是這里應該是多個Item,所以我們需要多Type來做,這里來看下我們的適配器的代碼:
這是一個很標準的RecyclerView適配器的Adapter,我定義了兩個Type來區別對待普通的item和最后的item,接著我就可以模擬一點數據了:
數據和適配器都有了,我們就可以運行來看下效果了:
到這里我們的基本樣式算是實現了,緊接著,我們需要拖拽,拖拽比較簡單,我們可以用ItemTouchHelper來實現,ItemTouchHelper的callback中,我們需要實現如下的方法:
- getMovementFlags 根據布局管理器控制拖拽方向
- onMove 移動并計算排序
- isLongPressDragEnabled 是否支持長按拖拽
- onSelectedChanged 選中的item改變
- clearView 松手改變狀態
了解了這些之后我們就可以來實現代碼了:
在這段代碼中我會詳細給大家介紹,首先是getMovementFlags,其實很簡單,我獲取到你當前的布局管理器,如果是LinearLayoutManager,那么只支持上下,如果是GridLayoutManager,那么上下左右都是可以拖拽的,接著來看onMove,這個是關鍵的方法,里面獲取到拖拽前后的對象,這里我直接判斷你拖拽移動的對象是否是最后一個,如果是,那么就不進行交換,如果不是,繼續往下走,最后刷新適配器,就能實現拖拽移動了,onSelectedChanged,這個只是選中改變的回調,我們啟動震動效果就好了,ok,先來基本的效果都已經實現了,至于下拉刷新,我直接使用了一個SwipeRefreshLayout來實現的,就不多說了,來運行看下效果:
有興趣可以加入我的星球:Hi Android , 里面可都是我手擼的新鮮文章,高質量你值得擁有!
進入星球你可以做什么?
1.我的所有視頻可以觀看
2.發布提問貼可以得到滿意的答案
3.可指定我寫你感興趣的技術文章
4.初學者可配套視頻輔導
5.有機會線下交流聚會
總結
以上是生活随笔為你收集整理的qt如何实现backspace的功能_如何实现知识星球列表拖拽功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正高变副高!高校实施“职称退步”?
- 下一篇: 孙悟空!登上 Nature !