Size: a a a

Android arch. components

2021 February 22

PA

Pavel Antoshkin in Android arch. components
Привет всем.
Пытаюсь в проект внедрить Flow и Room. Но не могу найти толком информации, как затаскивать данные в ViewModel из БД при её изменении.
Есть Flow<List<Item>>, что в таблице БД, что переменная в VM.
Но все Codelabs и примеры говорят только о связке Flow и LiveData.
У меня измененный MVVM, в которой viewModel держит State экрана. И весьма непонятно, как подписаться на flow.collect { ..}, которая в VM не работает.
Есть идеи? Может кто ссылку даст на статью или SOF?
источник

NT

Nikita Tipun in Android arch. components
Pavel Antoshkin
Привет всем.
Пытаюсь в проект внедрить Flow и Room. Но не могу найти толком информации, как затаскивать данные в ViewModel из БД при её изменении.
Есть Flow<List<Item>>, что в таблице БД, что переменная в VM.
Но все Codelabs и примеры говорят только о связке Flow и LiveData.
У меня измененный MVVM, в которой viewModel держит State экрана. И весьма непонятно, как подписаться на flow.collect { ..}, которая в VM не работает.
Есть идеи? Может кто ссылку даст на статью или SOF?
Почему collect не работает, в ВМ же есть vkewModelScope. Ну и дальше можешь в коллекте обновлять Стейт или же у флоу есть asLiveData и там комбинируй как хочешь
источник

PA

Pavel Antoshkin in Android arch. components
Nikita Tipun
Почему collect не работает, в ВМ же есть vkewModelScope. Ну и дальше можешь в коллекте обновлять Стейт или же у флоу есть asLiveData и там комбинируй как хочешь
В том-то и дело, что при внесении изменений в таблицу в другом экране, в нужном мне VM подписка на флоу не триггерит.
источник

NT

Nikita Tipun in Android arch. components
Pavel Antoshkin
В том-то и дело, что при внесении изменений в таблицу в другом экране, в нужном мне VM подписка на флоу не триггерит.
Ну у тебя ВМ умирает и скоуп закрывается, это нормально. Но если ты зайдёшь опять на экран, то у тебя снова будет подписка на флоу и по идее должны подтянуться актуальные данные. Или это не так работает🤔
источник

PA

Pavel Antoshkin in Android arch. components
Nikita Tipun
Ну у тебя ВМ умирает и скоуп закрывается, это нормально. Но если ты зайдёшь опять на экран, то у тебя снова будет подписка на флоу и по идее должны подтянуться актуальные данные. Или это не так работает🤔
смерть ВМ зависит от навигации, имхо. У меня идет переход дальше, я не убиваю текущий экран, он остается в стеке (по идее и ВМ должна оставаться).
По крайней мере Android Navigation Components работает в таком ключе.
источник

NT

Nikita Tipun in Android arch. components
Pavel Antoshkin
смерть ВМ зависит от навигации, имхо. У меня идет переход дальше, я не убиваю текущий экран, он остается в стеке (по идее и ВМ должна оставаться).
По крайней мере Android Navigation Components работает в таком ключе.
Тогда не понятно что не работает у collect { }
источник

VU

Vadim Uzbekov in Android arch. components
Pavel Antoshkin
В том-то и дело, что при внесении изменений в таблицу в другом экране, в нужном мне VM подписка на флоу не триггерит.
Проверь состояние scope, если пользуешься не viewModelScope и закрываешь его вручную, то нужно будет заново подписываться.
Ну и ещё есть один нюанс с flow, он тут описан
https://handstandsam.com/2021/02/19/the-best-way-to-collect-a-flow-in-kotlin-launchin/
Без кода, конечно, не поймёшь, в чём проблема
источник

AP

Anton Potekhin in Android arch. components
Pavel Antoshkin
Привет всем.
Пытаюсь в проект внедрить Flow и Room. Но не могу найти толком информации, как затаскивать данные в ViewModel из БД при её изменении.
Есть Flow<List<Item>>, что в таблице БД, что переменная в VM.
Но все Codelabs и примеры говорят только о связке Flow и LiveData.
У меня измененный MVVM, в которой viewModel держит State экрана. И весьма непонятно, как подписаться на flow.collect { ..}, которая в VM не работает.
Есть идеи? Может кто ссылку даст на статью или SOF?
должно работать. У меня по крайней мере работает. Что-то вы похоже не то сделали
источник
2021 February 24

PZ

Pavlo Zelinskiy in Android arch. components
Объясните мне пожалуйста, почему data binding начинает некорректно работать, если использовать его через by lazy делегат (ну то есть val view by lazy {dataBinding.view})? При первой инициализации фрагмента все работает нормально, но после вызова onDestroyView (), такое впечатление будто сохраняется ссылка на прошлый объект data binding, хотя инициализации data binding происходит в onCreateView.
источник