将 View 拖放到 RecyclerView 项目 Android 上 [英] Drag View and Drop it on RecyclerView item Android

查看:40
本文介绍了将 View 拖放到 RecyclerView 项目 Android 上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am developing an android application that has a screen contains the following:

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

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

I need some help about how to implement this process to drag View into Recycler item, the following figure explains exactly what I want to do but have no idea how to do it

非常感谢任何帮助

推荐答案

首先在你的回收适配器的 onCreateViewHolder 中添加一个 draglistener 到你的膨胀视图.

Start by adding a draglistener to your inflated view in onCreateViewHolder of your recycler adapter.

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 中开始拖动:

In the ACTION_DROP case you can either change the model and call notifyItemChanged(), or modify directly the view (that won't handle the rebinding case). Also in onCreateViewHolder add a longClickListener to your View, and in onLongClick start the drag:

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 开发者网站

For more information about drag and drop check out the android developers site

这篇关于将 View 拖放到 RecyclerView 项目 Android 上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆