【问题标题】:Android Drag and Drop getClipData returns always nullAndroid 拖放 getClipData 始终返回 null
【发布时间】:2011-09-04 17:13:03
【问题描述】:

我正在设计一个拖放操作,但我不知道如何访问我的数据。有人使用 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());

【问题讨论】:

    标签: android drag-and-drop clip


    【解决方案1】:

    不是在每一个拖拽事件中都能获取到剪辑数据,而是其中的一些,比如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;
                }
            }
    

    【讨论】:

    【解决方案2】:

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

    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,最后检查一下。

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2015-08-15
      • 2012-03-18
      • 2016-11-04
      • 2016-07-28
      相关资源
      最近更新 更多