Android 将文本视图拖动到编辑文本中

Android 将文本视图拖动到编辑文本中,android,drag-and-drop,Android,Drag And Drop,我是android编程新手,我正在尝试将textview拖到edittext中 我创建了一个OnTouchListener,它在textview中选择文本并将其存储为ClipData OnTouchListener: 然后我想将这些数据附加到EditText视图中。为此,我为EditText实现了一个OnDragListener OnDragListener: 问题是: 完成拖动后,textview的两个实例将附加到edittext 例如: 文本视图中的字符串:我要拖动此 插入EditText后

我是android编程新手,我正在尝试将textview拖到edittext中

我创建了一个OnTouchListener,它在textview中选择文本并将其存储为ClipData

OnTouchListener:

然后我想将这些数据附加到EditText视图中。为此,我为EditText实现了一个OnDragListener

OnDragListener:

问题是:

完成拖动后,textview的两个实例将附加到edittext

例如:

文本视图中的字符串:我要拖动此

插入EditText后:我要拖动此我要拖动此

我不明白为什么会有两滴,因为我已经为edittext覆盖了onDrag。 我还负责所有的DragEvent行动

编辑:在看到日志后,即使在移除DragListener后,我也会看到此消息

11-20 07:30:04.885: I/ViewRootImpl(3518): Reporting drop result: true

了解ViewRootImpl可能是什么吗?

之所以会发生这种情况,是因为它会重复拖动,因此您可以避免这种情况,如: 像这样附加文本:

创建布尔变量isDropping=false;不属于拖拉类

开始拖动时,使isDropping=true

而在下降中:

case DragEvent.ACTION_DROP: 
ClipData.Item item = event.getClipData().getItemAt(0); 
CharSequence paste = item.getText();
if(isDropping){
v.append(paste.toString());
isDropping=false;
} break;

我已经用过你的代码并检查过了

我知道,如果不实现Draglistner,它工作得很好,所以只需从项目中删除下面的全部代码,它就会工作得很好

 TextStage.setOnDragListener(new OnDragListener(){

    @Override
    public boolean onDrag(View v, DragEvent event) {
        switch(event.getAction())
        {
            case DragEvent.ACTION_DRAG_STARTED: break;
            case DragEvent.ACTION_DROP: ClipData.Item item = event.getClipData().getItemAt(0);
                                        CharSequence paste = item.getText();
                                        v.append(paste.toString());                                         
                                        break;
            case DragEvent.ACTION_DRAG_ENDED: break;
            case DragEvent.ACTION_DRAG_EXITED: break;
            default: break;
        }

        return false;
    }

});

我意识到将要删除的文本的MIME_类型从纯文本更改为html解决了以下问题:

ClipData data = ClipData.newPlainText("text", str);


这样,编辑文本将clipdata视为html,不会自动执行拖动操作。感谢您提供的所有答案

您没有返回值

TextStage.setOnDragListener(new OnDragListener(){

        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch(event.getAction())
            {
                case DragEvent.ACTION_DRAG_STARTED: break;
                case DragEvent.ACTION_DROP: ClipData.Item item = event.getClipData().getItemAt(0);
                                            CharSequence paste = item.getText();
                                            v.append(paste.toString());                                         
                                            break;
                case DragEvent.ACTION_DRAG_ENDED: break;
                case DragEvent.ACTION_DRAG_EXITED: break;
                default: break;
            }
//return true working perfect
            return true;
        }

    });
htmltext仅在16 API以上工作


谢谢你

谢谢你的建议,我刚刚试过这个,但似乎有两个不同的事件发生。1.OnDrag,其中我修改了字符串2。未知文本完全按照ClipDataIt的工作方式复制,但我也想在删除时修改文本。如果只是删除了on-drag侦听器,则无法添加附加功能。谢谢你的回答
ClipData data = ClipData.newPlainText("text", str);
ClipData data = ClipData.newHtmlText("text", str,"");
TextStage.setOnDragListener(new OnDragListener(){

        @Override
        public boolean onDrag(View v, DragEvent event) {
            switch(event.getAction())
            {
                case DragEvent.ACTION_DRAG_STARTED: break;
                case DragEvent.ACTION_DROP: ClipData.Item item = event.getClipData().getItemAt(0);
                                            CharSequence paste = item.getText();
                                            v.append(paste.toString());                                         
                                            break;
                case DragEvent.ACTION_DRAG_ENDED: break;
                case DragEvent.ACTION_DRAG_EXITED: break;
                default: break;
            }
//return true working perfect
            return true;
        }

    });