拖放没有从所有者删除

我在一个LinearLayout上使用了三个TextViews Drag&Drop将其移动到另一个容器。 我的代码:

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

我的问题是,我不想从基本容器中删除视图,它应该呆在那里,只是添加一个副本到第二个容器。

谢谢

Solutions Collecting From Web of "拖放没有从所有者删除"

一个视图在任何给定的时刻只能有一个父对象,你可以做的就是拖动视图,而不是将视图放到新的容器中,创build一个视图的副本并将其添加到新的容器中。

克隆一个视图:如果你的视图=>button叫myButton,那么你可以这样做:

 Button myButtonClone = new Button(context); myButtonClone.setText(myButton.getText()); 

你将有一个原始button的克隆。 这适用于所有其他属性,如果您想要创build一个ImageView的副本,只需创build一个新的,并将其drawable设置为与第一个ImageView相同。

如果你想克隆它,比新创build的视图将要求父视图。 因为一个孩子最多只能有一个直接父母,所以你必须给父母分配一个相同或不同的父母。

这里是一些谷歌的描述:

当您开始拖动时,您将包含要移动的数据以及描述此数据的元数据,作为系统调用的一部分。 在拖动过程中,系统将拖放事件发送到布局中每个视图的拖动事件侦听器或callback方法。 监听器或callback方法可以使用元数据来决定是否在数据被丢弃时接受数据。 如果用户通过View对象删除数据,并且View对象的侦听器或callback方法先前已经告知系统它希望接受该删除,则系统会在拖动事件中将数据发送到侦听器或callback方法

请阅读这个细节。 它会帮助你很多….

使用Android拖放框架,您可以允许用户使用graphics拖放手势将数据从一个View移动到另一个View中。 该框架包括一个拖拽事件类,拖拽监听器和帮助器方法和类。

这是它的总结。 如果您想保留现有父级视图,只需在同一父级中创build一个副本,并使其可见性GONE或您需要的任何内容即可。