将视图拖放到RecyclerView项目Android上

问题描述 投票:10回答:1

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

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

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

enter image description here

任何帮助深表感谢

android drag-and-drop android-recyclerview
1个回答
9
投票

首先在您的回收器适配器的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;
    }
});

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);
}

有关拖放的更多信息,请查看android developers site

© www.soinside.com 2019 - 2024. All rights reserved.