12

我正在设计一个拖放操作,但我不知道如何访问我的数据。有人使用 Clip Data 对象吗?这是我的代码:

开始拖放:

ClipData dragData= ClipData.newPlainText("my", "test") );
                    v.startDrag(dragData, 
                            new MyDragShadowBuilder(v),
                              v, 0);

监听事件:

case DragEvent.ACTION_DROP:{
    if (event.getClipDescription().getLabel().equals("my"))
           Log.d("myLog","Data:"+event.getClipData()+" "+event.getClipData().getItemCount());
4

2 回答 2

26

不是在每一个拖动事件中都能获取到剪辑数据,而是其中一些,比如 ACTION_DROP 类型

在此处输入图像描述

    dropableCanvas.setOnDragListener(new OnDragListener() {
        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                return true;
            case DragEvent.ACTION_DROP:
                ClipData clipData = event.getClipData();
                //...
                return true;
            default:
                return false;
            }
        }

在此处输入图像描述

于 2012-11-09T04:02:50.987 回答
3

在开始拖动之前,请使用以下代码设置一些剪辑数据

ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(v.getTag().toString(), mimeTypes, item);

然后在您开始拖动后,v.startDrag(......);DragEvent.ACTION_DROP必须使用以下代码捕获剪辑数据

String clipData = event.getClipDescription().getLabel().toString()

一旦你有clipData你可以玩。这并没有让我返回 null,请在最后检查您。

于 2012-05-09T00:22:12.253 回答