Android Drag and Drop getClipData возвращает всегда ноль - PullRequest
10 голосов
/ 30 мая 2011

Я планирую операцию перетаскивания, но я не знаю, как получить доступ к моим данным.Кто-нибудь имел опыт работы с объектами 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());

Ответы [ 2 ]

22 голосов
/ 09 ноября 2012

не в каждом событии перетаскивания можно получить данные клипа, но некоторые из них, например, тип 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

3 голосов
/ 09 мая 2012

Перед началом перетаскивания установите некоторые данные клипа, используя следующий код

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, вы можете поиграть.Это не вернуло меня к нулю, проверь тебя в конце.

...