в вьюмодели список других моделей - ты обречён на постоянный маппинг данных.
Ну вроде я понял, спасибо
Да не за что. Можешь поиграться с маппингом на бекграунде, кстати, если не хочешь загружать мейн тред. Запускай асинхронную таску, меняй тред, мапь списки, пуш новый список в ливдату через postValue. Только этот метод немного опасен, почитай про него. Данные не всегда доходят. Я бы вообще рекомендовал отказаться от ливдаты в сторону, например, StateFlow.
Ну или можешь через setValue, если будешь запускать асинхронную задачу в мейне, внутри неё запускай асинхронную таску в бекграунде, потом дождись результат и отправь его в ливдату.
Можно и через корутины ведь по идеи. А насчет ливдаты, я это чисто чтоб тестовое сделать изучаю
Да, можно через корутины. Но тут надо смотреть предметно, действительно ли тебе оно надо. Вся эта асинхронщина происходит не мгновенно, поэтому может быть такое, что "асинхронный" маппинг будет работать дольше. Всё зависит от того, сколько данных, как часто маппятся и т.д.
Привет, ещё вопрос возник,как думаешь, маппинг стейтов в айтемы лучше делать внутри viewModel или в активити/фрагменте?
Слушай я вроде сделал всё через маппинг и diffUtils, но теперь при нажатии на радио кнопку в айтеме видно небольшое "моргание" айтема,хотя пересоздаётся только он. Это нормально?
Payload используете?
не, asyncListDiffer
Моргание какого рода? Когда ты сеттишь предыдущее значение, чтобы разруливать вью стейт только внутри модели?
ну когда нажимаю на радиокнопку, виджеты внутри айтема белеют на секунду и обратно,мб анимация такая. Я не понял насчёт предыдущего значения, я при нажатии просто вызываю колбек в фрагменты,там вызываю метод из вьюмодели, который обновляет массив стейтов, потом создаётся нвой список айтемов и пихается в livedata<ArrayList<Item>> далее в differ поступает новый список,где только один элемент отличается, и только он промаргивает
Шикос, всё работает, даже не знал о видах связывания. Ещё раз спасибо.
Обсуждают сегодня