繁体   English   中英

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

[英]How to disable Swipe left and up in RecyclerView?

我只想在 RecyclerView 上执行正确的滑动。
但它在两侧滑动,也是一个好处。
如何禁用向左和向上滑动?
想要在右侧滑动时执行删除功能。

它有效,但它会滑动项目的所有侧面。 如何防止这种情况?

通知片段.java

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

通知列表适配器.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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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