Recyclerview向右滑动方向



我想知道你是否可以使用itemtouchhelper来驳回项目,只有当用户向右滑动时?我正在使用这个代码,但方向不起作用

public class CrimeTouchHelper extends ItemTouchHelper.SimpleCallback {
        private CrimeAdapter mMovieAdapter;
        public CrimeTouchHelper(CrimeAdapter movieAdapter){
            super(ItemTouchHelper.UP | ItemTouchHelper.DOWN,     ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
            this.mMovieAdapter = movieAdapter;
        }
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            //TODO: Not implemented here
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            //Remove item
            Log.e("DIRECTION", direction + "");
            if(direction == 8) {
                mMovieAdapter.remove(viewHolder.getAdapterPosition());
            }
        }
    }`

这很简单

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new
            ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT) {
                @Override
                public boolean onMove(
                        final RecyclerView recyclerView,
                        final RecyclerView.ViewHolder viewHolder,
                        final RecyclerView.ViewHolder target) {
                    return false;
                }
                @Override
                public void onSwiped(
                        final RecyclerView.ViewHolder viewHolder,
                        final int swipeDir) {
                    adapter.remove(viewHolder.getAdapterPosition());
                }
            };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(
            simpleItemTouchCallback
    );
    itemTouchHelper.attachToRecyclerView(itemsRecyclerView);

您可以将ItemTouchHelper.RIGHT作为构造函数的第二个参数来传递,该参数实际地接受方向。

使用onSwipe()方法执行要执行的操作,例如从适配器中删除项。

希望这能有所帮助。如果你遇到任何问题,请告诉我。

在CrimeTouchHelper的构造函数中的超级方法中设置它。

第二个参数是滑动方向,所以只需通过ItemTouchHelper.RIGHT

super(ItemTouchHelper.UP | ItemTouchHelper.DOWN, ItemTouchHelper.RIGHT);

之后,您可以在#onSwipped 中删除"if"复选框

您当前的if签入#onSwiped不会阻止刷卡。假设8是向右滑动的int值,那么您现在所要做的就是阻止适配器移除该项目(但该项目仍将被视觉上滑动)。

您应该覆盖getMovementFlags方法,并在customItemTouchHelper.Callback类中将滑动标志设置为ItemTouchHelper.START

 @Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    // Set movement flags based on the layout manager
    if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
        final int swipeFlags = 0;
        return makeMovementFlags(dragFlags, swipeFlags);
    } else {
        final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
        final int swipeFlags = ItemTouchHelper.START;
        return makeMovementFlags(dragFlags, swipeFlags);
    }
}

这将阻止从左向右滑动。要执行相反的方向,请将标志设置为ItemTouchHelper.END

最新更新