2011-05-30 94 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