【发布时间】:2016-10-06 03:52:15
【问题描述】:
当我将一个项目从另一个 RecyclerView 拖放到它上面时,我需要以某种方式通知 RecyclerView。
- 有可能吗?
- 还是应该使用经典的Drag and drop framework?
带有蓝色项目的RecyclerView 在一个片段中,带有红色项目的RecyclerView 在另一个片段中。
我也尝试过使用ItemTouchHelper,但它是来自ItemTouchHelper.Callback 的onMove() 方法在与外面的项目一起移动时不会被调用
来自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,但它并没有解决我的问题。
【问题讨论】:
-
@maratus 我想使用相同的功能你找到解决方案了吗?
-
你最后做了什么?
-
由于 RecyclerView 提供
OnItemTouchListener来处理触摸事件,理论上您需要实现的是创建与新回收器视图相同的项目,并通过编码将其从前一个视图中删除为所需的运动事件。它可能不是您想要的,但原则上是相同的功能。 -
我也陷入了困境,你有解决方案吗?
-
你检查this了吗,这是一个老问题,但似乎是同一个问题!
标签: java android android-fragments android-recyclerview drag-and-drop