RecyclerView搭配ItemTouchHelper實(shí)現(xiàn)長(zhǎng)按拖拽、滑動(dòng)刪除

ItemTouchHelper是一個(gè)支持RecyclerView滑動(dòng)刪除、長(zhǎng)按拖拽的一個(gè)工具類,使用它我們可以裝B無止境,提高用戶體驗(yàn)。

長(zhǎng)按拖拽的效果

長(zhǎng)按拖拽 滑動(dòng)刪除
longdrag
swipedelete

ItemTouchHelper使用中常見的一些方法

使用ItemTouchHelper我們需要自定義一個(gè)類繼承ItemTouchHelper.Callback實(shí)現(xiàn)它的幾個(gè)重要的構(gòu)造方法

  • public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder),這個(gè)方法返回RecyclerView的Item可以滑動(dòng)、拖拽的方向,dragFlags是拖拽的方向,swipeFlags是滑動(dòng)??梢愿鶕?jù)不同的需求定義滑動(dòng)、拖拽的方向。
@Override
    public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();
        int dragFlags;
        if (manager instanceof GridLayoutManager || manager instanceof StaggeredGridLayoutManager) {
            //網(wǎng)格布局管理器允許上下左右拖動(dòng)
            dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
        } else {
            //其他布局管理器允許上下拖動(dòng)
            dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        }
        return makeMovementFlags(dragFlags, 0);
    }
  • public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target),拖拽到新位置時(shí)候的回調(diào)方法,這里通過接口回調(diào)將開始position和結(jié)束position通知給到使用的地方,讓其進(jìn)行數(shù)據(jù)處理。
@Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        //不同Type之間不允許移動(dòng)
        if (viewHolder.getItemViewType() != target.getItemViewType()) {
            return false;
        }
        if (onItemDragListener != null) {
            onItemDragListener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition());
        }
        return true;
    }
  • public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction),當(dāng)用戶左右滑動(dòng)的時(shí)候執(zhí)行的方法,這里通過接口回調(diào)將滑動(dòng)的Item的position通知到調(diào)用者。
@Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        if (onItemSwipeListener != null) {
            onItemSwipeListener.onItemSwiped(viewHolder.getAdapterPosition());
        }
    }
  • public boolean isLongPressDragEnabled(),是否支持長(zhǎng)按拖拽,默認(rèn)值為true。
@Override
  public boolean isLongPressDragEnabled() {
      return super.isLongPressDragEnabled();
  }
  • public boolean isItemViewSwipeEnabled(),是否支持滑動(dòng),默認(rèn)值為true。
@Override
   public boolean isItemViewSwipeEnabled() {
       return super.isItemViewSwipeEnabled();
   }

項(xiàng)目完整代碼ItemTouchHelper

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

相關(guān)閱讀更多精彩內(nèi)容

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