實現(xiàn)recycleview水平拖拽排序

今天我面試,面試官給了我一個需求,就是實現(xiàn)視頻幀列表拖拽排序,網(wǎng)上的都是網(wǎng)格排序啊,或者垂直排序,也沒有什么水平排序的資料,其實你根據(jù)邏輯,可以思考一下思路,我的思路如下:

1、首先你得建立一個適配器,去裝填數(shù)據(jù),而且排列方式是水平的

2、然后就得考慮一下事件的處理,因為拖拽的是recycleview的item,recycleview里面包含了一個工具類:ItemTouchHelper,你需要實現(xiàn)下面幾個方法:

getMovementFlags:這個是item移動的flag,就是判斷item的拖拽方向

onMove:這個方法是獲取在移動中的事件

onSelectedChanged:item長按選擇(主要是為了提示用戶你選擇了當前的item)

clearView:取消長按(為了恢復原狀)

當你new了這個類,需要和recycleview進行綁定,截屏一下源碼:

這個方法是為了將當前內(nèi)存中的recycleview進行綁定,因為后面要實現(xiàn)這個類里面的接口,進行對應(yīng)的拖拽操作

我們先從簡單的講起:

這個前面也說過,提示用戶選擇當前模塊,調(diào)用手機震動


這個是恢復后,保持排列,不會使數(shù)據(jù)錯亂。之所以調(diào)用notifyDataSetChanged(),是為了刷新數(shù)據(jù),讓列表數(shù)據(jù)不會錯亂


最重要的來了,當你選中item然后實現(xiàn)拖動,就會觸發(fā)這個事件。一個是被移動的item,另一個是要被裝填的item;當被移動的位置在被裝填位置的前面,那就遞增尋找位置,進行數(shù)據(jù)的重新置換排列,反之就遞減循環(huán),最后面再刷新一下位置,如果你不刷新,那就是兩個item層疊,錯位

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容