Recyclerview向右滑动方向

时间:2016-01-03 08:54:39

标签: android android-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());
            }
        }
    }`

3 个答案:

答案 0 :(得分:2)

这很简单。您可以使用此代码

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()方法执行您要执行的操作,例如从适配器中删除项目。

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

答案 1 :(得分:0)

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

第二个参数是滑动方向,因此只需传递ItemTouchHelper.RIGHT

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

之后,您可以删除' if'签入#onSwiped

您登录#onSwiped时的当前状态不会阻止滑动。假设8是向右滑动的int值,那么你现在正在做的就是阻止适配器移除该项目(但该项目仍然会在视觉上被刷掉)。

答案 2 :(得分:0)

你应该覆盖getMovementFlags方法并在你的customItemTouchHelper.Callback类中将swipe标志设置为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