我正在使用带有三个TextViews Drag& Drop的LinearLayout将其移动到另一个容器。 我的代码:
OnDragListener dragi = new OnDragListener() {
@Override
public boolean onDrag(View arg0, DragEvent arg1) {
// TODO Auto-generated method stub
int action = arg1.getAction();
switch (action) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
break;
case DragEvent.ACTION_DRAG_EXITED:
break;
case DragEvent.ACTION_DROP:
View view = (View) arg1.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
//
LinearLayout container = (LinearLayout) arg0;
container.addView(view);
view.setVisibility(View.VISIBLE);
}
break;
case DragEvent.ACTION_DRAG_ENDED:
break;
default:
break;
}
return true;
}
};
我的问题是,我不想从基本容器中删除视图,它应该保留在那里,只需将副本添加到第二个容器。
THX
答案 0 :(得分:6)
视图在任何给定时刻只能有一个父项,您可以执行的操作是拖放,而不是将视图放入新容器中创建视图的克隆并将其添加到新容器中。
要克隆视图:如果您的视图=>按钮名为myButton,然后你可以这样做:
Button myButtonClone = new Button(context);
myButtonClone.setText(myButton.getText());
您将拥有原始按钮的克隆。这适用于所有其他属性,如果您想要克隆ImageView,只需创建一个新的并将其drawable设置为与第一个ImageView相同的那个..
答案 1 :(得分:0)
如果要克隆它,则新创建的视图将要求父视图。因为孩子最多可以拥有一个直接父母,所以你必须为其分配相同或不同的父母。
以下是一些谷歌描述:
当您开始拖动时,您将包含正在移动的数据和描述此数据的元数据作为对系统调用的一部分。在拖动期间,系统将拖动事件发送到布局中每个视图的拖动事件侦听器或回调方法。侦听器或回调方法可以使用元数据来决定是否要在删除数据时接受数据。如果用户通过View对象删除数据,并且该View对象的侦听器或回调方法先前告诉系统它想要接受丢弃,那么系统将数据发送到侦听器或回调方法拖动事件
Please read this for detail. It will help you alot....
使用Android拖放框架,您可以允许用户使用图形拖放手势将数据从一个视图移动到当前布局中的另一个视图。该框架包括一个拖动事件类,拖动侦听器以及辅助方法和类。
这是它的总结。如果您希望保留现有父级中的视图,只需在同一父级中创建一个副本,并使其可见性为GONE或您需要的任何内容。