Перетаскивание без удаления с владельца

Я использую 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; } }; 

Моя проблема в том, что я не хочу удалять представление из базового контейнера, он должен оставаться там и просто добавлять копию ко второму контейнеру.

Спасибо

В любой момент может быть только один родитель, то, что вы можете сделать, это перетащить, вместо того чтобы отбрасывать представление в новый контейнер, создайте клон представления и добавьте его в новый контейнер.

Чтобы клонировать представление: если ваша кнопка вида =>, называемая myButton, вы можете сделать это:

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

У вас будет клон оригинальной кнопки. Это относится ко всем другим свойствам, если вы хотите сделать клонирование ImageView просто создать новый и установить его drawable таким же, как первый ImageView.

Если вы хотите клонировать его, то новое созданное представление будет запрашивать родительское представление. Поскольку у ребенка может быть не более одного прямого родителя, вам нужно назначить для него одного и того же или другого родителя.

Вот описание google:

Когда вы начинаете перетаскивание, вы включаете как перемещаемые данные, так и метаданные, описывающие эти данные, как часть вызова системы. Во время перетаскивания система отправляет события перетаскивания в прослушиватели событий перетаскивания или методы обратного вызова каждого представления в макете. Слушатели или методы обратного вызова могут использовать метаданные, чтобы решить, хотят ли они принимать данные при его удалении. Если пользователь удаляет данные по объекту View и что слушатель или метод обратного вызова View ранее сообщал системе, что он хочет принять падение, система отправляет данные слушателю или метод обратного вызова в событие перетаскивания

Пожалуйста, прочитайте это для деталей. Это поможет вам …

С помощью платформы перетаскивания Android вы можете позволить своим пользователям перемещать данные из одного вида в другой. Просмотр в текущем макете с помощью графического жесткого перетаскивания. Структура включает в себя класс события перетаскивания, прослушиватели перетаскивания и вспомогательные методы и классы.

Это лето. Если вы хотите сохранить представление в существующем родителе, просто сделайте копию в одном и том же родителе и сделайте его видимым GONE или независимо от вашей потребности.

Intereting Posts
Камера Chase со спрайтом в andengine Как проверить, является ли приложение не системным приложением в Android? Включая библиотеку recyclerview в проект Eclipse (не можете увидеть, как проект библиотеки будет включен в мой проект) Могу ли я использовать actionLayout в меню переполнения android.support.v7.widget.Toolbar? Цвет текста ActionBar Добавить пользовательский словарь для проверки орфографии в Android Studio Отладочные модульные тесты с использованием IntelliJ / AndroidStudio Объединение SurfaceView с другими представлениями, такими как TextView и кнопки @Named провайдеры с одинаковыми типами возврата в конечном итоге дают java.lang.IllegalArgumentException: дубликат Запись, сохранение и воспроизведение видео в Android Автозапуск Animation-list (animationDrawable) Использование Google Maps на Xamarin.Forms для Android Android: передать событие жестов в другое представление React Native Android – Статические ресурсы, не отображающие Удаленный фрагмент Android и вид из BackStack