2011-05-30 17 views
9

Estoy diseñando una operación de arrastrar y soltar, pero no sé cómo acceder a mis datos. ¿Alguien ha experimentado con objetos Clip Data? Aquí está mi código:Android arrastrar y soltar getClipData devuelve siempre nulo

Inicio del arrastrar y soltar:

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

escuchar sobre los acontecimientos:

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

Respuesta

21

no en cada evento de arrastre pueden obtener los datos del clip, pero algunos de ellos, como el tipo de 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

¡Muy buena respuesta, +1 y gracias! – Soham

+0

En caso de que alguien se pregunte qué eventos contienen qué, puede encontrarlo en la documentación de DragEvent (consulte la primera tabla): http://developer.android.com/reference/android/view/DragEvent.html – Pijusn

3

Antes de comenzar su arrastre establece algunos datos de clip usando el siguiente código

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

Y luego después de comenzar a arrastrar con v.startDrag(......); en el evento DragEvent.ACTION_DROP tienes que coger los datos de clip usando el siguiente código

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

vez que tenga el clipData se puede jugar. Esto no me devolvió la nulidad, lo veré en su extremo.

+0

Gracias a este. – CENT1PEDE