【问题标题】:Drag View and Drop it on RecyclerView item Android将 View 拖放到 RecyclerView 项目 Android 上
【发布时间】:2017-06-23 07:18:59
【问题描述】:

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

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

我需要一些有关如何实施此流程的帮助 将 View 拖入 Recycler 项,下图准确解释了我想要做什么但不知道该怎么做

非常感谢任何帮助

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,它看起来很棒,但我有一个简单的问题,如何获得适配器视图位置?谢谢
    • viewholder.getAdapterPosition()
    • 非常感谢!我需要的确切答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2015-07-06
    相关资源
    最近更新 更多