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

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

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

Drag and drop an item to another RecyclerView

带有蓝色项目的RecyclerView在一个 fragment 中,带有红色项目的RecyclerView在另一个 fragment 中。

我也尝试过使用 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 ,但它并没有解决我的问题。

最佳答案

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

要将某些东西从一个 View 拖到另一个 View ,您可以使用 DragShadowBuilderItemTouchHelper 仅用于在 RecyclerView 中移动项目,您需要自定义实现。

查看此文档:https://developer.android.com/guide/topics/ui/drag-drop (所以是的,你想要的应该是这个经典的拖放框架,正如你所说的那样)

它向您展示了如何创建阴影、如何移动它(自动完成)以及如何对第二个 View 中的拖动事件使用react。

工作流程如下:

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

DragShadowBuilder 的帮助下,您可以找到这方面的教程,例如这里的一个:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html

关于java - 是否可以将项目拖到 RecyclerView 之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659123/

相关文章:

java - 为每个新创建的 JLabel 创建鼠标监听器

android - 我想将我的 3gp 音频文件转换为 .wav 格式

android - 如何将后退按钮事件从 phonegap 发送到 ember 应用程序?

android - WebViewFragment webView 在执行 FragmentTransaction 后为 null

android - 为什么 ViewPager 高度 match_parent 不起作用?

java - Java中单变量非线性函数的最小查找

java - 对于在 Java/Swing 中创建流畅的动画来说,这是一个很好的设计吗?

android - 如何在 Linux 中未崩溃时显式转储 native (C/C++)进程的调用堆栈信息

android - 实现此布局的正确方法?

java - 自定义ListView + getView方法