Я слушаю поток, исходящий из базы данных, и пытаюсь обновить данные адаптера следующим образом:
Код: Выделить всё
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