Android перетаскивания getClipData возвращает всегда null

Я разрабатываю операцию перетаскивания, но я не знаю, как получить доступ к моим данным. Есть ли у кого-нибудь опыт работы с объектами данных Clip? Вот мой код:

начало перетаскивания:

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 ответов


не в каждом событии перетаскивания можно получить данные клипа, но некоторые из них, такие как ACTION_DROP type

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


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

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