简体   繁体   English

用于水平 RecyclerView 的 ItemTouchHelper

[英]ItemTouchHelper for Horizontal RecyclerView

I am trying to implement ItemTouchHelper for Horizontal Recyclerview.我正在尝试为 Horizo​​ntal Recyclerview 实现 ItemTouchHelper。 (setting layout manager to LinearLayoutManager with orientation LinearLayoutManager.HORIZONTAL). (将布局管理器设置为具有方向 LinearLayoutManager.HORIZONTAL 的 LinearLayoutManager)。 Example, I want to delete an item when swiped down and drag to left or right for swapping items.例如,我想在向下滑动时删除一个项目并向左或向右拖动以交换项目。

All the samples I have gone through explains ItemTouchHelper for Vertical Recyclerview or items in grid.我经历过的所有示例都解释了用于 Vertical Recyclerview 或网格中的项目的 ItemTouchHelper。

Followed samples from following links:遵循以下链接中的示例:
https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf
https://medium.com/@xabaras/recyclerview-swiping-with-style-151e21b1af07 https://medium.com/@xabaras/recyclerview-swiping-with-style-151e21b1af07

How can I achieve swipe down to delete and drag sideways to swap items in Horizontal Recyclerview?如何实现向下滑动以删除并横向拖动以交换 Horizo​​ntal Recyclerview 中的项目?

You can use this simple code to achieve the swipe down to remove.您可以使用这个简单的代码来实现向下滑动删除。

ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.DOWN) {
            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,  RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            final int position = viewHolder.getLayoutPosition();
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                adapter.removeNote(position);
                adapter.notifyItemRemoved(position)
            }
        }
    };
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);

For Kotlin geeks below is the code for the same -对于 Kotlin 极客,下面是相同的代码 -

val simpleCallback = object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.DOWN) {
        override fun onMove(recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, target: RecyclerView.ViewHolder): Boolean {
            return false
        }

        override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
            if (direction == ItemTouchHelper.DOWN) {
                //your code for deleting the item from database or from the list
                val position = viewHolder.adapterPosition
                noteList.removeAt(position)
                adapter.notifyItemRemoved(position)
            }
        }
    }
    val itemTouchHelper = ItemTouchHelper(simpleCallback)
    itemTouchHelper.attachToRecyclerView(recycler_view)

You only need to change the method "getMovementFlags".您只需要更改方法“getMovementFlags”。

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

to

@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    final int swipeFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
    final int dragFlags = ItemTouchHelper.START | ItemTouchHelper.END;
    return makeMovementFlags(dragFlags, swipeFlags);
}

To delete an item, create a new method in "ItemTouchHelperAdapter" called "onSwiped" and implement it to remove the item要删除项目,请在“ItemTouchHelperAdapter”中创建一个名为“onSwiped”的新方法并实现它以删除项目

@Override
public boolean onSwiped(int itemPosition, int direction) {
    if(direction == SimpleItemTouchHelperCallback.SWIPED_TO_END) {
        list.remove(itemPosition);
        notifyItemRemoved(itemPosition);
    }else{
        notifyItemChanged(itemPosition);
    }
    return true;
}

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

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