是否可以将项目拖到RecyclerView之外?

时间:2016-06-06 13:44:48

标签: java android android-fragments android-recyclerview drag-and-drop

当我将一个项目从另一个RecyclerView拖放到其上时,我需要以某种方式通知RecyclerView

Drag and drop an item to another RecyclerView

带有蓝色项目的

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,但它并没有解决我的问题。

1 个答案:

答案 0 :(得分:2)

老问题,但还没有回答,所以我提供一个简短的问题......

要将某个视图拖动到另一个视图,您可以使用DragShadowBuilderItemTouchHelper仅用于移动RecyclerView中的项目,您需要根据需要自定义实现。

查看此文档:https://developer.android.com/guide/topics/ui/drag-drop(所以是的,你想要的是你应该使用的这个classid拖放框架)

它向您展示了如何创建阴影,如何移动阴影(自动完成)以及如何在第二个视图中对拖动事件做出反应。

工作流程如下:

  1. 例如,创建拖动阴影长按RecyclerView 1中的项目(它是项目的副本,在应用程序上绘制)
  2. 阴影可以移动,已经由框架处理;这将调用拖动进入/退出并在拖放的视图上拖动事件
  3. 在第二个View.OnDragListener上添加RecyclerView并处理事件(例如,如果用户将数据放在第二个RecyclerView上,则将数据添加到第一个RecyclerView中,并将其从第一个DragShadowBuilder中删除1}})
  4. 在{{1}}的帮助下,您可以找到有关此内容的教程,例如这里的那个:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html