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

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

  • 可能吗?
  • 或者我应该使用经典的拖放框架

Drag and drop an item to another RecyclerView

RecyclerView蓝色项目位于一个片段中,红色项目位于另一个片段中。RecyclerView

我也尝试过使用 ItemTouchHelper,但它是 ItemTouchHelperonMove() 方法。在将 item 移出时不调用回调。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;
    }
}

我也发现了这个问题,但它不能解决我的问题。


答案 1

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

要将某些内容从一个视图拖动到另一个视图,可以使用 .仅用于在 中移动项目,您需要一个自定义实现来实现您想要的内容。DragShadowBuilderItemTouchHelperRecyclerView

查看此文档:https://developer.android.com/guide/topics/ui/drag-drop(所以是的,对于您想要的,您应该是您称之为经典的拖放框架)

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

工作流程如下:

  1. 创建拖动阴影,例如,长按 1 中的项目(它是项目的副本,在应用程序上绘制)RecyclerView
  2. 阴影可以四处移动,已经由框架处理;这将调用拖动进入/退出并在拖动的视图上拖动事件
  3. 在第二个上添加 a 并处理事件(例如,如果用户将数据放在第二个上,则在第二个上添加数据,并将其从第一个事件中删除View.OnDragListenerRecyclerViewRecyclerViewRecyclerView)

在的帮助下,您可以找到有关此内容的教程,例如此处的教程:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.htmlDragShadowBuilder


答案 2