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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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