Android 将文本视图拖动到编辑文本中
我是android编程新手,我正在尝试将textview拖到edittext中 我创建了一个OnTouchListener,它在textview中选择文本并将其存储为ClipData OnTouchListener: 然后我想将这些数据附加到EditText视图中。为此,我为EditText实现了一个OnDragListener OnDragListener: 问题是: 完成拖动后,textview的两个实例将附加到edittext 例如: 文本视图中的字符串:我要拖动此 插入EditText后:我要拖动此我要拖动此 我不明白为什么会有两滴,因为我已经为edittext覆盖了onDrag。 我还负责所有的DragEvent行动 编辑:在看到日志后,即使在移除DragListener后,我也会看到此消息Android 将文本视图拖动到编辑文本中,android,drag-and-drop,Android,Drag And Drop,我是android编程新手,我正在尝试将textview拖到edittext中 我创建了一个OnTouchListener,它在textview中选择文本并将其存储为ClipData OnTouchListener: 然后我想将这些数据附加到EditText视图中。为此,我为EditText实现了一个OnDragListener OnDragListener: 问题是: 完成拖动后,textview的两个实例将附加到edittext 例如: 文本视图中的字符串:我要拖动此 插入EditText后
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;
}
});