安卓拖放操作中,getClipData方法总是返回null

12

我正在设计一个拖放操作,但是不知道如何访问我的数据。有人对剪切板数据对象有经验吗?这是我的代码:

开始拖放:

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

在此输入图片描述


1
如果有人想知道哪些事件包含了什么内容,可以在DragEvent文档中找到(请参阅第一个表格):http://developer.android.com/reference/android/view/DragEvent.html - Pijusn

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

DragEvent.ACTION_DROP事件中,使用v.startDrag(......);开始拖动后,您需要使用以下代码捕获剪贴板数据:

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

一旦你获取了clipData,你就可以尝试各种操作。这个方法没有返回null,请检查是否在您的端口有误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接