简体   繁体   中英

How to disable Swipe left and up in RecyclerView?

I want to perform only the right swipe on RecyclerView.
But it swipes on both sides and also an upside.
How to disable swipe left and up?
Want to perform delete functionality on the right swipe.

It works but it swipes all the side of items. How to prevent this?

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

在此处输入图片说明 在此处输入图片说明

I want it like a 1st image.

We can define swipe directions by using SimpleCallback().

For RIGHT:

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

For LEFT:

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

For Both:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM