私のアプリケーションでは、ビューグループを設計したいと思います。このビューグループにテキストビューなどのコンテンツを追加すると、テキストビューはDragEventを受け入れることができます。 私はandroid4.0でビューの受け入れドロップイベントを作成する方法は?
@Override
public void addView(View child) {
super.addView(child);
child.setOnDragListener(new ViewDragger());
child.setOnLongClickListener(new DragStarter()) ;
}
class DragStarter implements OnLongClickListener{
@Override
public boolean onLongClick(View v) {
ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
ClipData dragData = new ClipData((CharSequence) v.getTag(),new String[]{"*/*"},item);
View.DragShadowBuilder builder = new View.DragShadowBuilder(v);
boolean started = v.startDrag(dragData, builder, v , 0) ;
System.out.println("start drag " + started+" " + v);
return false;
}
}
class ViewDragger implements OnDragListener{
@Override
public boolean onDrag(View v, DragEvent event) {
if(event.getAction() == DragEvent.ACTION_DRAG_ENDED){
System.out.println("drag end");
}
if(event.getAction() == DragEvent.ACTION_DRAG_ENTERED){
System.out.println("drag entered.");
}
if(event.getAction() == DragEvent.ACTION_DRAG_EXITED){
System.out.println("drag existed.");
}
if(event.getAction() == DragEvent.ACTION_DRAG_LOCATION){
System.out.println("drag location");
}
if(event.getAction() == DragEvent.ACTION_DRAG_STARTED){
System.out.println("drag started.");
}
if(event.getAction() == DragEvent.ACTION_DROP){
System.out.println("action drop");
return true ;
}
System.out.println("view-->" + v);
return false;
}
}`
以下のコードを使用して、それを試してみました。しかし、私は期待通りの機能は実行されません。 1つのテキストビューをロングクリックすると、すべてのDragListenerが呼び出され、「ドラッグ開始」と「ドラッグ終了」だけが表示されます。私はAPIDemoでデモを読んでいましたが、ドラッグイベントを通常のウィジェットに使うことができます。何かアドバイス? THX