如何在android4.0中使视图接受删除事件?

如何在android4.0中使视图接受删除事件?,android,drag-and-drop,Android,Drag And Drop,在我的应用程序中,我想设计一个视图组。如果用户向该视图组中添加一些内容,如textview,则textview可以接受。 我用下面的代码试过了 @Override public void addView(View child) { super.addView(child); child.setOnDragListener(new ViewDragger()); child.setOnLongClickListener(new DragStarter()) ; } cla

在我的应用程序中,我想设计一个视图组。如果用户向该视图组中添加一些内容,如textview,则textview可以接受。 我用下面的代码试过了

@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;
    }

}`

但是函数并没有像我期望的那样运行。当我长时间单击一个文本视图时,所有DragListener都会被调用,并且只打印“拖动开始”和“拖动结束”。我在APIDemo中阅读了演示,但我希望拖动事件可以用于普通的小部件。有什么建议吗?THX

它不起作用的原因是,当您收到操作“拖动”启动时,您没有响应true

if(event.getAction() == DragEvent.ACTION_DRAG_STARTED){
            System.out.println("drag started.");
            return true;
}

当您获得启动事件时,添加return true,您将注册以侦听该对象将来的拖动事件。

它不起作用的原因是,当您收到操作\u drag\u start时,您没有响应true

if(event.getAction() == DragEvent.ACTION_DRAG_STARTED){
            System.out.println("drag started.");
            return true;
}

当您获得启动事件时,添加return true,您将注册以侦听该对象将来的拖动事件。

我在“活动”中添加了一个图像视图,用于在特定位置进行拖放。 并将拖动侦听器设置为布局

public class MainActivity extends Activity 
{

private ImageView image;
private AbsoluteLayout my; 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   my=(AbsoluteLayout)findViewById(R.id.my);
  image =(ImageView)findViewById(R.id.imageView1);  
  my.setOnDragListener(new View.OnDragListener()
  {

    @Override
    public boolean onDrag(View v, DragEvent event) {
        if(event.getAction() == DragEvent.ACTION_DRAG_STARTED){
            System.out.println("drag started.");
            return true;
}
    if(event.getAction()==DragEvent.ACTION_DROP)
        {
        image.setX(event.getX());
        image.setY(event.getY());
            System.out.println("DROP ENTERED");
            return true;
    }
    else
            return false;
    }
});

  image.setOnTouchListener(new View.OnTouchListener() {


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            View.DragShadowBuilder bu=new View.DragShadowBuilder(v);
            ClipData clp=ClipData.newPlainText("", "");

            v.startDrag(clp,bu,(ImageView)v,0);


        return true;
        }
        else

        return false;
    }
});



}
}

我在活动中添加了一个图像视图,用于在特定位置进行拖放。 并将拖动侦听器设置为布局

public class MainActivity extends Activity 
{

private ImageView image;
private AbsoluteLayout my; 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   my=(AbsoluteLayout)findViewById(R.id.my);
  image =(ImageView)findViewById(R.id.imageView1);  
  my.setOnDragListener(new View.OnDragListener()
  {

    @Override
    public boolean onDrag(View v, DragEvent event) {
        if(event.getAction() == DragEvent.ACTION_DRAG_STARTED){
            System.out.println("drag started.");
            return true;
}
    if(event.getAction()==DragEvent.ACTION_DROP)
        {
        image.setX(event.getX());
        image.setY(event.getY());
            System.out.println("DROP ENTERED");
            return true;
    }
    else
            return false;
    }
});

  image.setOnTouchListener(new View.OnTouchListener() {


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            View.DragShadowBuilder bu=new View.DragShadowBuilder(v);
            ClipData clp=ClipData.newPlainText("", "");

            v.startDrag(clp,bu,(ImageView)v,0);


        return true;
        }
        else

        return false;
    }
});



}
}