如何在 RecyclerView 中禁用向左和向上滑动?

How to disable Swipe left and up in RecyclerView?

我只想在 RecyclerView 上执行右滑操作。
但它在两边滑动,也有上升空间。
如何禁用向左和向上滑动?
想要在右侧滑动时执行删除功能。

它可以工作,但它会滑动项目的所有侧面。如何预防?

NotificationFragment.java

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position) {
        if (viewHolder instanceof NotificationListAdapter.ViewHolder) {
            mAdapter.removeItem(viewHolder.getAdapterPosition());
         }
    }  

NotificationListAdapter.java

    public void removeItem(int position) {
        callDeleteService(position);
    }  

RecyclerItemTouchHelper

public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {

    private RecyclerItemTouchHelperListener listener;

    public RecyclerItemTouchHelper(int dragDirs ,int swipeDirs ,RecyclerItemTouchHelperListener listener) {
        super( dragDirs ,swipeDirs );
        this.listener = listener;
    }

    @Override
    public boolean onMove(RecyclerView recyclerView ,RecyclerView.ViewHolder viewHolder ,RecyclerView.ViewHolder target) {
        return true;
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder ,int actionState) {
        if (viewHolder != null) {
            final View foregroundView = ((NotificationListAdapter.ViewHolder) viewHolder).viewForeground;

            getDefaultUIUtil().onSelected( foregroundView );
        }
    }

    @Override
    public void onChildDrawOver(Canvas c ,RecyclerView recyclerView ,
                                RecyclerView.ViewHolder viewHolder ,float dX ,float dY ,
                                int actionState ,boolean isCurrentlyActive) {
        final View foregroundView = ((NotificationListAdapter.ViewHolder) viewHolder).viewForeground;
        getDefaultUIUtil().onDrawOver( c ,recyclerView ,foregroundView ,dX ,dY ,
                actionState ,isCurrentlyActive );
    }

    @Override
    public void clearView(RecyclerView recyclerView ,RecyclerView.ViewHolder viewHolder) {
        final View foregroundView = ((NotificationListAdapter.ViewHolder) viewHolder).viewForeground;
        getDefaultUIUtil().clearView( foregroundView );
    }

    @Override
    public void onChildDraw(Canvas c ,RecyclerView recyclerView ,
                            RecyclerView.ViewHolder viewHolder ,float dX ,float dY ,
                            int actionState ,boolean isCurrentlyActive) {
        final View foregroundView = ((NotificationListAdapter.ViewHolder) viewHolder).viewForeground;

        getDefaultUIUtil().onDraw( c ,recyclerView ,foregroundView ,dX ,dY ,
                actionState ,isCurrentlyActive );
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder ,int direction) {
//        if (direction == ItemTouchHelper.END){
        listener.onSwiped( viewHolder ,direction ,viewHolder.getAdapterPosition() );
//        }
//        else {
//            Log.d( "Swipe LEFT  : ", " DO NOTHING" );
//        }

    }

    @Override
    public int getMovementFlags(RecyclerView recyclerView ,RecyclerView.ViewHolder viewHolder) {
        int dragFlags = 0;
        int swipeFlags = ItemTouchHelper.LEFT;

        return makeMovementFlags( dragFlags ,swipeFlags );
    }

    @Override
    public int convertToAbsoluteDirection(int flags ,int layoutDirection) {
        return super.convertToAbsoluteDirection( flags ,layoutDirection );
    }

    public interface RecyclerItemTouchHelperListener {
        void onSwiped(RecyclerView.ViewHolder viewHolder ,int direction ,int position);
    }
}     

我想要它作为第一张图片。

我们可以使用 SimpleCallback() 定义滑动方向。

右边:

ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.RIGHT, this);
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);

左边:

ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this);
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);

对于两者:

ItemTouchHelper.SimpleCallback itemTouchHelperCallback = new RecyclerItemTouchHelper(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
    new ItemTouchHelper(itemTouchHelperCallback).attachToRecyclerView(recyclerView);