簡體   English   中英

Android-Recycler視圖設置項無法滑動

[英]Android - Recycler view set item not swipeable

我正在使用RecyclerViewItemTouchHelper.SimpleCallback => onSwiped方法。 回收者視圖中的某些項目正在進行中,我想在其上禁用滑動。

我該怎么做?

您可以在ItemTouchHelper.SimpleCallback重寫getSwipeDirs() 如果您不希望可滑動項目,則返回0。

此方法的第二個參數是要滑動項目的ViewHolder-您可以在ViewHolder上添加一個簡單標志,以指示該項目是否可滑動。

例如:

static class SwipeViewHolder extends RecyclerView.ViewHolder {
    public boolean isSwipeable;

    public SwipeViewHolder(View itemView) {
        super(itemView);
    }
}

和回調:

static class DragAndSwipeCallback extends ItemTouchHelper.SimpleCallback {

    public DragAndSwipeCallback(int dragDirs, int swipeDirs) {
        super(dragDirs, swipeDirs);
    }

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        // Perform drag
        return false;
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        // Remove item
    }

    @Override
    public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        if (viewHolder instanceof SwipeViewHolder
                && ((SwipeViewHolder) viewHolder).isSwipeable) {
            return super.getSwipeDirs(recyclerView, viewHolder);
        } else {
            return 0;
        }
    }
}

就我而言,我注意到沒有調用getSwipeDirs() ,可能是因為我也設置了motionFlags

我也必須重寫getMovementFlags() ,如下所示:

        @Override
        public int getMovementFlags(RecyclerView recyclerView,
                                    RecyclerView.ViewHolder viewHolder) {
            if (viewHolder instanceof SwipeViewHolder
                    && ((SwipeViewHolder) viewHolder).isSwipeable) {
                return makeMovementFlags(0, super.getSwipeDirs(recyclerView, viewHolder));
            } else {
                return makeMovementFlags(0, 0);
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM