Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Можно ли реализовать перемещение (drag&drop) элемента из ListView в другой Layout?Не ListView, а, например, LinearLayout

R V Ученик (99), на голосовании 3 дня назад
У меня есть список с элементами. Подразумевается,что пользователь улерживает один элемент и перемещает его в другой контейнер (не listview), где этот элемент динамически добавляется в виде обычного linear
Можно ли такое реализовать? Или изначально не должно быть listview и весь список надо формировать как набор linear'ов внутри linear'а?
Голосование за лучший ответ
Даниил Сергеев Знаток (499) 1 месяц назад
Да, можно реализовать перемещение элемента из ListView в другой Layout, например, LinearLayout, используя drag&drop. Однако, ListView не идеально подходит для этого, и использование RecyclerView значительно упростит задачу.

Почему RecyclerView лучше:

ListView имеет ограничения в плане кастомизации и эффективности при работе с большим количеством элементов. RecyclerView предоставляет больше контроля над отображением и обновлением элементов, что делает реализацию drag&drop проще и эффективнее.

Как реализовать с RecyclerView:

Настройка RecyclerView: Создайте RecyclerView с адаптером, который будет отображать ваши элементы. Адаптер должен поддерживать перетаскивание (drag&drop).

ItemTouchHelper: Используйте ItemTouchHelper для обработки жестов перетаскивания. ItemTouchHelper.Callback позволит вам переопределить методы для начала перетаскивания, перемещения элемента и отпускания.

Перемещение элемента: В методе onMove вашего ItemTouchHelper.Callback вы будете перемещать элемент внутри RecyclerView.

Удаление и добавление элемента: Когда пользователь отпускает элемент над целевым LinearLayout, вам нужно удалить его из RecyclerView и добавить в LinearLayout. Для этого вам потребуется обновить адаптер RecyclerView и обновить LinearLayout динамически.

Управление данными: Важно синхронизировать данные в вашем адаптере RecyclerView и в LinearLayout. Используйте один источник данных (например, ArrayList или LiveData), который будет обновляться при перемещении элементов.
Похожие вопросы