OnDragListener 获取数据 和 设置数据
时间: 2024-02-17 20:02:29 浏览: 32
OnDragListener 接口本身并不提供设置数据的方法,它只是用于处理拖放操作的事件。但你可以在拖放操作开始时,使用 ClipData 类来设置要传递的数据,然后在 OnDragListener 的 onDrag() 方法中获取这些数据。
下面是一个示例代码,演示了如何在拖放操作开始时设置数据,并在 onDrag() 方法中获取数据:
```
// 设置拖放源
View sourceView = findViewById(R.id.my_source_view);
sourceView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 创建传递的数据
ClipData.Item item = new ClipData.Item("Hello, world!");
ClipData clipData = new ClipData("my_data", new String[]{"text/plain"}, item);
// 开始拖放操作
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDragAndDrop(clipData, shadowBuilder, null, 0);
return true;
}
});
// 设置拖放目标
View targetView = findViewById(R.id.my_target_view);
targetView.setOnDragListener(new View.OnDragListener() {
@Override
public boolean onDrag(View v, DragEvent event) {
if (event.getAction() == DragEvent.ACTION_DROP) {
// 获取传递的数据
ClipData clipData = event.getClipData();
if (clipData != null) {
String data = clipData.getItemAt(0).getText().toString();
// 在拖放目标中显示数据
((TextView) v).setText(data);
return true;
}
}
return false;
}
});
```
在这个示例代码中,我们在拖放源的长按事件中,创建了一个包含文本数据的 ClipData 对象,并在调用 startDragAndDrop() 方法时传递了这个 ClipData 对象。在拖放目标的 onDrag() 方法中,我们调用了 DragEvent 的 getClipData() 方法来获取传递的数据,并将其显示在目标视图中。