我需要以某种方式通知RecyclerView
当我拖放一个项目从另一个RecyclerView
到它。
- 有可能吗?
- 还是应该使用经典Drag and drop framework?
带有蓝色项的RecyclerView
在一个片段中,带有红色项的RecyclerView
在另一个片段中。
我也试过使用ItemTouchHelper,但它的onMove()方法从ItemTouchHelper.Callback没有被调用,而与项目从RecyclerView
外部移动。
private class CustomItemTouchCallback extends Callback {
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(UP|DOWN|START|END, 0);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
android.util.Log.d(TAG, "Move item from:" + viewHolder.getAdapterPosition() + " to: " + target.getAdapterPosition());
return true;
}
@Override
public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
android.util.Log.d(TAG, "Moved item from:" + fromPos + " to: " + toPos + " x: " + x + " y: " + y);
super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
@Override
public boolean isItemViewSwipeEnabled() {
return false;
}
}
我也找到了这个question,但它不能解决我的问题。
2条答案
按热度按时间btqmn9zl1#
老问题,但还没有答案,所以我提供一个简短的...
要将某些内容从一个视图拖动到另一个视图,可以使用
DragShadowBuilder
。ItemTouchHelper
仅用于在RecyclerView
中移动项目,您需要自定义实现。查看此文档:https://developer.android.com/guide/topics/ui/drag-drop(所以是的,你想要的应该是这个经典的拖放框架,正如你所说的那样)
它向您展示了如何创建阴影,如何移动它(自动完成)以及如何在第二个视图中对拖动事件做出React。
工作流程如下:
1.创建拖动阴影时,例如。长按
RecyclerView
1中的项目(它是项目的副本,在应用程序上绘制)1.阴影可以移动,框架已经处理了;这将调用拖动进入/退出和拖动事件在视图上,它被拖动
1.在第二个
RecyclerView
上添加View.OnDragListener
并处理事件(例如,如果用户将数据放在第二个RecyclerView
上,则将其添加到第二个RecyclerView
中,并将其从第一个RecyclerView
中删除)在
DragShadowBuilder
的帮助下,您可以找到相关教程,例如。这里的一个:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.htmlr8xiu3jd2#
我已经使用ItemTouchHelper和OnItemTouchHelper完成了这一操作
在此rvCustomerList中,是用户视图。现在,我可以将所选项目从recyclrview移动到屏幕的任何位置。
希望这对你有帮助。