如何實現知識星球列表拖拽功能?
你好,你問這個就算問對了,我之前專門為這個功能寫了一篇文章在我的知識星球【Hi Android】中,我們來看下如何實現吧:
可以看到,要想實現這個功能,需要大致的分為三個要求:
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 , 里面可都是我手擼的新鮮文章,高質量你值得擁有!
注意,因為悟空問答是不支持Gif的,所以效果圖沒有動態效果,原文地址:
https://articles.zsxq.com/id_90mv1na44xik.html
希望我的答案對你有所幫助,謝謝。