[英]ItemTouchHelper for Horizontal RecyclerView
I am trying to implement ItemTouchHelper for Horizontal Recyclerview.我正在尝试为 Horizontal 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?如何实现向下滑动以删除并横向拖动以交换 Horizontal 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.