При перетаскивании элементов списка порядок остается прежним
Пишу свой ToDo List на Android (Kotlin) с сохранением в базе данных. Реализовал возможность перетаскивать элементы, меняя их местами. Однако, есть проблема. Для удобства сделал гифку:
- есть список с названиями: 1, 2, 3.
- меняю 1 и 2 местами.
- кликаю на 1, чтобы отредактировать.
- возвращаюсь к списку, но порядок вернулся к тому, который был до перетаскивания.
Если кто-то сталкивался с таким, буду рад помощи.
Ответы (1 шт):
Я думаю, что ваша проблема состоит в том, что вы неправильно храните сам список. Я конечно могу ошибаться т.к. вы не приложили кода, но смею предположить, что ваш список храниться (или получается) где-то или в самом адаптере или Activity.
Если вы хотите иметь актуальное состояние вашего экрана, то вам нужно позаботиться об актуальности данных. Самый простой способ это создать какую-то сущность (Presenter/ViewModel и т.п.) в которой будет храниться состояние экрана, в вашем случае это ваш список в нужном порядке.
Условно вы вошли на экран:
- Загрузили данные и передали их в ваша
Adapter. - После чего вы поменяли их местами. И тут важный момент, вы должны сделать замену не в адаптере, а в вашем
Presenter/ViewModelи после чего заново обновить адаптер. Тут стоит реализовать DiffUtils, чтоб всякий раз не обновлять весь список. - После того как вы вернулись на предыдущий экран вы просто снова подгружаете состояние из
Presenter.
В целом это же можно сделать и через базу данных, а если вы используете RX Java то вы вообще можете просто подписать ваш адаптер на изменения в БД. И все изменения гонять через БД, так вы будете получать актуальное состояние даже после выгрузки приложения из памяти.
Но суть в том, что ваш UI не должен ничего знать о логике получения данных, он должен быть максимально тупым и единственной его ответственностью должно быть: "Рисование самого себя".
В то же время слой с логикой и данными не должен зависеть от вашего UI, и хранить в себе актуальное состояние независимо от того что и где открылось.