2011-05-30 113 views
9

我正在设计一个拖放操作,但我不知道如何访问我的数据。有没有人使用剪辑数据对象?这里是我的代码:Android拖放getClipData返回始终为空

启动拖放:

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

回答

21

不是每个拖动事件可以得到剪辑数据,但他们中的一些,如ACTION_DROP型

enter image description here

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

enter image description here

+0

非常好的答案,+1和谢谢! – Soham 2012-12-06 07:09:41

+0

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

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,请检查你的结局。

+0

感谢。 – CENT1PEDE 2014-12-02 17:14:16