ListAdapter submitList уже содержит обновленные элементы, поэтому список не обновляется.Android

Форум для тех, кто программирует под Android
Anonymous
ListAdapter submitList уже содержит обновленные элементы, поэтому список не обновляется.

Сообщение Anonymous »

Я слушаю поток, исходящий из базы данных, и пытаюсь обновить данные адаптера следующим образом:

Код: Выделить всё

lifecycleScope.launchWhenCreated {
presenter.data.buffer().collectLatest {
val newList = it.toMutableList()
adapter.data = newList
}
}
Когда этот блок попадает в этот блок, адаптер.data уже имеет обновленное содержимое, из-за чего DiffUtil не обновляет список, поскольку содержимое отправленных данных и то, что имеет адаптер.data, точно такое же, включая только что сделанное мной обновление. Чаще всего это происходит при альтернативных попытках (первая попытка не работает, поскольку в файле Adaptor.data уже есть данные, отправленные потоком, во второй попытке нет, поэтому применяются оба обновления одновременно)
Это объект данных в адаптере, который вызывает submitList:

Код: Выделить всё

    var data: List by Delegates.observable(emptyList()) { _, old, new ->
submitList(new)}
И вот как я передаю данные:

Код: Выделить всё

    val messageData = messageRepository.getMessages(id).map {
//Mapping code
returnList.toList()
}
Я могу подтвердить, что эмиссия всегда вызывается первой, и это единственное место, где я присваиваю значение адаптеру.data. Мне странно, почему адаптер.data уже имеет обновленное значение до того, как оно будет назначено при альтернативных попытках

Подробнее здесь: https://stackoverflow.com/questions/790 ... nt-get-upd

Вернуться в «Android»