Java “拖动视图”由于布局更改转换而导致崩溃

Java “拖动视图”由于布局更改转换而导致崩溃,java,android,Java,Android,因此,我有一个活动,用户可以在其中对视图(以编程方式创建)重新排序,这是可行的,但通常情况下,该活动会因为以下错误而崩溃:指定的子级已具有父级。您必须首先对子级的父级调用removeview()我发现发生这种情况是因为我有布局转换,我想视图在转换发生之前不会删除。有人有办法吗 以下是视图的onTouchListener: view.setOnTouchListener(new View.OnTouchListener() { @Override

因此,我有一个活动,用户可以在其中对视图(以编程方式创建)重新排序,这是可行的,但通常情况下,该活动会因为以下错误而崩溃:
指定的子级已具有父级。您必须首先对子级的父级调用removeview()
我发现发生这种情况是因为我有布局转换,我想视图在转换发生之前不会删除。有人有办法吗

以下是视图的onTouchListener:

view.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        switch (event.getAction()) {
                            case MotionEvent.ACTION_MOVE:
                                if (Math.round(event.getX()) >= 720) {
                                    ClipData data = ClipData.newPlainText("", "");
                                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                                    v.startDrag(data, shadowBuilder, v, 0);
                                    v.setVisibility(View.INVISIBLE);
                                }
                                return true;
                            default:
                                return false;
                        }
                    }
                });
view.setOnDragListener(new View.OnDragListener() {
                    @Override
                    public boolean onDrag(View v, DragEvent event) {
                        switch (event.getAction()) {
                            case DragEvent.ACTION_DRAG_STARTED:
                                return true;
                            case DragEvent.ACTION_DROP:
                                View view = (View) event.getLocalState();
                                LinearLayout owner = (LinearLayout) view.getParent();
                                owner.removeView(view);
                                owner.addView(view, getNewViewPosition(fillView.indexOfChild(v), Math.round(v.getY()), Math.round(event.getY())));
                                view.setVisibility(View.VISIBLE);
                                return true;
                            default:
                                return false;
                        }
                    }
                });
以下是视图的onDrag侦听器:

view.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        switch (event.getAction()) {
                            case MotionEvent.ACTION_MOVE:
                                if (Math.round(event.getX()) >= 720) {
                                    ClipData data = ClipData.newPlainText("", "");
                                    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                                    v.startDrag(data, shadowBuilder, v, 0);
                                    v.setVisibility(View.INVISIBLE);
                                }
                                return true;
                            default:
                                return false;
                        }
                    }
                });
view.setOnDragListener(new View.OnDragListener() {
                    @Override
                    public boolean onDrag(View v, DragEvent event) {
                        switch (event.getAction()) {
                            case DragEvent.ACTION_DRAG_STARTED:
                                return true;
                            case DragEvent.ACTION_DROP:
                                View view = (View) event.getLocalState();
                                LinearLayout owner = (LinearLayout) view.getParent();
                                owner.removeView(view);
                                owner.addView(view, getNewViewPosition(fillView.indexOfChild(v), Math.round(v.getY()), Math.round(event.getY())));
                                view.setVisibility(View.VISIBLE);
                                return true;
                            default:
                                return false;
                        }
                    }
                });