将视图拖放到RecyclerView项目Android上

Wae*_*hah 10 android drag-and-drop android-recyclerview

我正在开发一个Android应用程序,其屏幕包含以下内容:

  1. 包含类别的Recycler视图,如下图所示
  2. 按钮上的单独视图和用户应该能够在RecyclerView项目上拖动它,并且在放下之后,用户将显示在RecyclerView项目数据处更改(例如,类别中的项目计数)

我需要一些关于如何实现此过程以将View拖入Recycler项目的帮助,下图解释了我想要做什么但不知道如何做

在此输入图像描述

任何帮助深表感谢

Dri*_*ori 9

首先在您的Recycler onCreateViewHolder适配器的膨胀视图中添加一个draglistener .

view.setOnDragListener(new OnDragListener() {
    @Override
    public boolean onDrag(View view, DragEvent dragEvent) {

        switch (dragEvent.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                // drag has started, return true to tell that you're listening to the drag
                return true;

            case DragEvent.ACTION_DROP:
                // the dragged item was dropped into this view
                Category a = items.get(getAdapterPosition());
                a.setText("dropped");
                notifyItemChanged(getAdapterPosition());
                return true;
            case DragEvent.ACTION_DRAG_ENDED:
                // the drag has ended
                return false;
        }
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

在这种ACTION_DROP情况下,您可以更改模型并调用notifyItemChanged(),或直接修改视图(不会处理重新绑定的情况).此外,在onCreateViewHolder添加longClickListener到您View,并onLongClick开始拖拽:

ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(view.getTag().toString(),
            mimeTypes, item);
view.setVisibility(View.GONE);
DragShadowBuilder myShadow = new DragShadowBuilder(view);

if (VERSION.SDK_INT >= VERSION_CODES.N) {
    view.startDragAndDrop(dragData, myShadow, null, 0);
} else {
    view.startDrag(dragData, myShadow, null, 0);
}
Run Code Online (Sandbox Code Playgroud)

有关拖放的更多信息,请查看android开发者网站

  • 非常感谢,它看起来很棒,但我有一个简单的问题如何获取适配器视图位置?谢谢 (2认同)
  • 与“viewholder.getAdapterPosition()” (2认同)