使用DragListenerClass时:
protected class myDragEventListener implements View.OnDragListener {
@Override
public boolean onDrag(final View v, DragEvent event) {
final int action = event.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENDED :
case DragEvent.ACTION_DRAG_EXITED :
case DragEvent.ACTION_DROP:
Log.d("DROP", "DROP");
if((ViewGroup) dragView.getParent() != null)
((ViewGroup) dragView.getParent()).removeView(dragView);
main_layout.addView(dragView,currentViewIndexUnderDragView);
break;
case DragEvent.ACTION_DRAG_LOCATION:
break;
}
return true;
}
}
使用这样的拖动侦听器类:
final myDragEventListener dragListener = new myDragEventListener();
main_container.setOnDragListener(dragListener);
拖动就像这样开始:
onLongClickListener = new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
v.startDrag(null,new View.DragShadowBuilder(v), null, 0);
main_layout.removeView(v);
dragListener.dragView = v;
return true;
}
};
问题是掉线被叫了两次,我不知道为什么或我做错了什么。
答案 0 :(得分:1)
实际事件DragEvent.ACTION_DROP
仅发生一次,但您对三个不同的事件使用相同的代码。拖动结束后({drop>退出操作)会发生DragEvent.ACTION_DRAG_ENDED
并再次执行您的代码。我建议将其拆分为自己的case
或完全删除它。
您可以在此处了解所有行动行为http://developer.android.com/reference/android/view/DragEvent.html