Как отключить пролистывание влево и вверх в RecyclerView? - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу выполнить только правую прокрутку на 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);
    }
}     

enter image description here enter image description here

Я хочу это как 1-е изображение.

1 Ответ

1 голос
/ 26 февраля 2020

Мы можем определить направления пролистывания, используя 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);
...