Size: a a a

Android Developers

2021 November 06

СП

Сергей П. in Android Developers
Есть observeForever, которую можно в vm сделать  (только отписаться не забудь).
источник

PV

Pavel Vasilev in Android Developers
Предлагаешь подписаться на обновление не во фрагменте, а во вьюмодели?
источник

СП

Сергей П. in Android Developers
Ну сейчас это раскритикуют - но в принципе можно и там и там.
источник

СП

Сергей П. in Android Developers
Обсерверов вешай сколько угодно.
источник

PV

Pavel Vasilev in Android Developers
а как гарантировать порядок срабатывания? иначе модель не успеет обновить итоги а фрагмент кинет в адаптер событие рисуй что есть..
источник

L

Leonid in Android Developers
Я предлагаю использовать инструменты таким образом, для которого они были придуманы.

Где-то (неважно как) появились новые данные. Их отдали в лайвдату. Дальше - не наши проблемы слушает кто-то эту лайвдату или нет.
источник

L

Leonid in Android Developers
Зачем он чего-то кидает? Пусть сидит и ждёт, когда для него всё будет готово.
источник

PV

Pavel Vasilev in Android Developers
Если я их буду слушать в 2-х местах, как я могу быть уверен что первый слушатель сработает раньше второго?
источник

L

Leonid in Android Developers
Как бы это ваш код. Вы не уверены в собственном коде? 🤷
источник

СП

Сергей П. in Android Developers
Я бы это извращение сделал так  - обсервил лайфдату в vm, по ее готовности  запускал пересчет итогов и по их готовности обновлял уже сидящую в в вм лайфдату что обсервит вью
источник

СП

Сергей П. in Android Developers
Или, что ничем не хуже - считал бы итоги в репозитории, и отдавал бы их вместе с данными и не раньше.
источник

PV

Pavel Vasilev in Android Developers
Это похоже уже на вариант. Попробую так.
источник

Kd

Konstantin dmz9 in Android Developers
mViewModel = ViewModelProvider(this).get(MainFragmentViewModel::class.java)
mViewModel.myData.observe(viewLifecycleOwner, {
   if(null == it) return;
   if(null == adapter) {
     adapter = createAdapter(it)
   }else {
     adapter.setMyData(it)
   }
})

if(null == adapter) { adapter = createAdapter(emptyList()) }
можешь так попробовать сделать, чтобы первый стейт у тебя был ненулевой;
с холодной ВМ у тебя отработает создание после подписки, а с горячей вм (после поворота) - создание адаптера будет во время первой подписки, если у тебя цель не делать лишний дифф
источник

L

Leonid in Android Developers
Я то же самое давно предлагаю: приготовить данные в вм и только после этого положить их в лайвдату. Но нет.
источник

СП

Сергей П. in Android Developers
Ну "цепочка" из двух странно выглядит и observeforever люди шугаются боясь утечек часто.
источник

СП

Сергей П. in Android Developers
Но почему нет
источник

L

Leonid in Android Developers
Может быть, это какая-то специфическая задача, но имхо всё выглядит очень просто и традиционно.

Фрагмент -> ВМ: чё как?
ВМ -> фрагменту: думает, отдает (может быть) лайвдату.
источник

Kd

Konstantin dmz9 in Android Developers
думает на юи треде? )
источник

ОА

Оганнес Асатрян... in Android Developers
мне кажется ваша беседа безрезультативна без конкретного куска кода
источник

L

Leonid in Android Developers
Где правильно, там и думает :)
источник