由于布局更改过渡,拖动视图会导致崩溃

时间:2015-12-22 23:55:40

标签: java android

所以我有一个活动,用户可以重新排序视图(以编程方式创建),这可以工作,但是由于错误,活动经常会崩溃:the specified child already has a parent. you must call removeview() on the child's parent first我发现这是因为我有布局转换,我想在转换发生之前视图不会被删除。任何人都有修复?

以下是视图的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;
                        }
                    }
                });

以下是视图的onDrag监听器:

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

0 个答案:

没有答案