Android,删除后删除拖动的项目

时间:2013-03-04 22:50:46

标签: java android drag-and-drop

// Touched
public class ChoiceTouchListener implements OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {

        switch (motionEvent.getAction()) {

        case MotionEvent.ACTION_MOVE:

            return true;

        case MotionEvent.ACTION_DOWN:
            Viewed = String.valueOf(view.getId());

            ClipData data = ClipData.newPlainText("", "");
            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);

            // Drag Function When Item Touched
            view.startDrag(data, shadowBuilder, view, 0);
            return true;

        case MotionEvent.ACTION_UP:
            return true;

        default:
            return true;
        }
    }
}



private class ChoiceDragListener implements OnDragListener {

    // onDrag Method, imagine we dragging numbers from display TextView
    @Override
    public boolean onDrag(View v, DragEvent event) {

        // Android has onDrag action types. there are some kind of action
        switch (event.getAction()) {

            // if drag stared
            case DragEvent.ACTION_DRAG_STARTED:

            break;

            // if drag entered software
            case DragEvent.ACTION_DRAG_ENTERED:

            break;

            // if drag exited, stopped or something
            case DragEvent.ACTION_DRAG_EXITED:

            break;

            // main case, if drag dropped what we do...
            case DragEvent.ACTION_DROP:

                // handle the dragged view being dropped over a drop view
                View view = (View) event.getLocalState();

                // stop displaying the view where it was before it was dragged
                // ************* view.setVisibility(View.KEEP_SCREEN_ON);

                // view dragged item, where numbers will be dragged
                dropTarget = (TextView) v;

                // view dropped item, that will be dropped in drag TextView
                dropped = (TextView) view;

                // view result place, when make math operation, show results
                resultPlace = (TextView) findViewById(R.id.calcResult);


                // simple debug
                // ****** resultPlace.setText( dropped.getText() + " " + dropTarget.getText() );

                // if an item has already been dropped here, there will be a tag
                Object tag = dropTarget.getTag();


                // if there is already an item here, set it back visible in its
                // original place
                if (tag != null)
                {
                    // the tag is the view id already dropped here
                    int existingID = (Integer) tag;

                    // set the original view visible again
                    findViewById(existingID).setVisibility(View.VISIBLE);


                }

                // set the tag in the target view being dropped on - to the ID
                // of the view being dropped
                dropTarget.setTag(dropped.getId());

                // show results
                resultPlace.setText( dropped.getText() + " " + dropTarget.getText() + " " + dropped.getText() );



            break;

            // if drag ended, we did it already successfully
            case DragEvent.ACTION_DRAG_ENDED:

            break;

            // what do default
            default:

            break;
        }
        return true;
    }
}

我有非常简单的触摸和拖动类。 我唯一的问题是,当我拖动项目并放入某个布局时,我的项目也保持在旧位置。 android中是否有任何方法可以检测我正在触摸的项目并在删除后将其删除?

我有一个小应用程序,点击数字并在仪表板中拖动,然后重复它并将仪表板中的所有项目拖动到X和Y位置。这就是为什么我想要清空旧的数字空间来创建另一个。

...谢谢

2 个答案:

答案 0 :(得分:1)

我在程序中最终得到类似的东西,希望它有所帮助。

View.OnDragListener DropListener = new View.OnDragListener() {
    @Override
    public boolean onDrag(View v, DragEvent event) {
        int dragEvent = event.getAction();

        switch (dragEvent) {
            case DragEvent.ACTION_DRAG_ENTERED:
                Log.i("Drag Event", "Entered");
                break;

            case DragEvent.ACTION_DRAG_EXITED:
                Log.i("Drag Event", "Exited");
                break;

            case DragEvent.ACTION_DROP:
                TextView target = (TextView) v;
                TextView dragged = (TextView) event.getLocalState();
                target.setText((CharSequence) dragged.getText());
                dragged.setText("");
                break;

        }
        return true;
    }
};

答案 1 :(得分:0)

您可以在触控侦听器中获取视图的父级。在下面的操作中,将父视图保留在全局变量中,当视图删除时,使用removeView(View v)函数将其从父视图中删除。