Как создать ListView с перетаскиваемыми элементами?

Я искал ListPreference, в котором пользователь может изменить порядок элементов в списке. Элементы можно было бы перетаскивать, и их можно было бы изменить

Я видел это в своем пользовательском ПЗУ (и я почти уверен, что видел это в Cyanogenmod) для QuickPanel. Вот скриншот, чтобы понять идею:

Screenshot of the "widget Button Order" in QuickPanel Settings of Sabotage ROM

Я знаю, как я могу сделать собственный ListView элементы и установить значок, чтобы указать, что элементы можно перетаскивать, но я не знаю, как сделать их перетаскиваемыми, и соответственно изменить порядок.Что касается сохранения их в настройках, я нашел это, который может

PS: я знаю, что Cyanogenmod имеет открытый исходный код, но я не смог найти исходный код для этой конкретной вещи :( Ближайший, который я мог получить, был this, который должен быть где-то рядом с другим экраном...

Заранее спасибо за любую подсказку по этому поводу.

ОБНОВЛЕНИЕ : в итоге я использовал файлы из принятого ответа с дополнениями и изменениями. Я перечисляю их здесь для дальнейшего использования.

  • Используйте пользовательский адаптер (в моем случае ArrayAdapter), чтобы реализовать визуальную обратную связь о том, что этот элемент можно перетаскивать, то есть объект ImageView рядом с TextView. Это необязательно.

  • Установите DragListener и RemoveListener для соответствующего обновления списка. ListView не делает этого автоматически. И это зависит от адаптера, который вы используете.

  • Была строка, которая приводила View к ViewGroup, она допустила несколько ошибок, поэтому я удалил приведение без каких-либо проблем, это было не нужно. (в методе onInterceptTouchEvent).

  • Измените mRemoveMode = 1;в конструкторе TouchInterceptor или одно из: FLING = 0; СЛАЙД = 1; МУСОР = 2;. Я думаю, что для TRASHтоже должен быть доступен ресурс.

Я вообще-то взял файл не по ссылке в ответе, а из Cyanogenmod, который у меня уже был, но думаю эти файлы были одинаковые.

Это фактические файлы в проекте (в r12, на момент написания):

Надеюсь, это поможет кому-то еще :)

5
задан Community 23 May 2017 в 12:13
поделиться