Android - Recycler view set item not swipeable

淺唱寂寞╮ 提交于 2019-12-08 05:31:47

问题


I am using a RecyclerView and ItemTouchHelper.SimpleCallback => onSwiped method. Some of the items at the recycler view are in progress and i want to disable swipe on them.

How can i do it?


回答1:


You can override getSwipeDirs() in your ItemTouchHelper.SimpleCallback. Return 0 when you don't want an item to be swipe-able.

The second parameter to this method is the ViewHolder for the item being swiped- you can add a simple flag to your ViewHolder to indicate whether or not it is swipe-able.

For example:

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

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

And the callback:

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;
        }
    }
}



回答2:


In my case I noticed getSwipeDirs() wasn't being called, probably because I had set movementFlags as well.

I had to override getMovementFlags() as well, like so:

        @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);
            }
        }


来源:https://stackoverflow.com/questions/34026005/android-recycler-view-set-item-not-swipeable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!