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