Size: a a a

Android arch. components

2018 September 03

Y

Yuriy in Android arch. components
Dmi Sb
Если во ViewModel будет какая-то логика и по ее результатам нужно вывести AlertDialog, то как правильно это сделать ?
ведь мы во ViewModel контекст не пробрасываем
Нельзя и Гугл категорически запрещает.
источник

DS

Dmi Sb in Android arch. components
Yuriy
Нельзя и Гугл категорически запрещает.
что именно нельзя ? пробрасывать контекст ?
источник

Y

Yuriy in Android arch. components
Вот что я писал в чат по архитектуре
источник

Y

Yuriy in Android arch. components
Yuriy:
ай нид хелп “фром май харт”. Коротко вопрос звучит так: в MVVM (AAC) каким образом Domain (бизнес логика) может управлять отображением в View слое ? Теперь подробнее. Имеется в виду, что внутри domain: 1) вызрели некие данные, которые нужно показать; 2) сменилось состояние, на что нужно реагировать (скрыть/показать группу виджетов, вызвать новый фрагмент, показать/обновить прогресс и т.п.). И сделать это сложнее, чем просто показать сообщение или диалог, или просто LiveData запихнуть в RecyclerView. Поэтому примерами, типа hello world просьба не бросаться, там все ясно. В MVP именно это делается просто. А вот здесь, походу, удалось нащупать слабое место MVVM. Сейчас сделано, так.
Посредством RxJava2 (как вариант это м.б. LiveDataEvent из AAC) из Domain в View (через ViewModel AAC) прокидывается объект, который несет в себе тип команды (enum) и собственно имеет кучу полей для данных на все случаи жизни (разные для разных команд конечно же). И далее в View сидит switch-case по типу команды, который все это разруливает. И чувствую я, что может быть есть путь элегантнее. Но, 1) паттерн Команда здесь точно не катит, 2) паттерн Состояние мной уже реализован, и это тоже не он. Есть вариант насоздавать кучку конкретных объектов, и тогда в View будет сидеть большой if-instanceof, что то же самое. Либо вариант складировать данные для View в ViewModel AAC (для чего она вобщем-то и предназначена), а посылать из domain только тип команды, далее View берет все нужные данные из VM. Хваленый Fernando Cejas в статье “Architecting Android...Reloaded” обходит вопрос тем, что реализовывает всего 3 примитивных UseCase и всё, для которых достаточно тупо показать LiveData, но это я уже видел 1000001 раз по всему инету, спасибо. Итак: есть ли (если он есть) способ элегантнее? М.б. хитрый паттерн какой. Возможно я зря рефлексирую, и это и есть путь.
ps. И еще раз пну Fernando. В своей статейке он гордо сообщает, что заменил RxJava на LiveData, типа “делай как я”. Ну, ну. У меня например, реализовано backpressure, как хваленый Cejas собрался разруливать такой кейс?
источник

Y

Yuriy in Android arch. components
Dmi Sb
что именно нельзя ? пробрасывать контекст ?
Именно. И даже подчеркнул это в оф доке
источник

Y

Yuriy in Android arch. components
Так, сам забыл зачем зашел
источник

Y

Yuriy in Android arch. components
Для запуска фрагментов, заменил системный bundle на main ViewModel. Раньше как было: активити зовет static newInstance() у фрагмента, туда передает и пакует в бандлы аргументы, по классике. Теперь активити зовет тот же newInstance(), туда передает свою ViewModel и POJO объект с аргументами. И далее фрагмент подсоединяется к main ViewModel откуда берет   аргументы. Вроде схема работает. И что-то не могу найти в ней недостатки. Что скажете ?
источник

S

Sergey in Android arch. components
Yuriy
Yuriy:
ай нид хелп “фром май харт”. Коротко вопрос звучит так: в MVVM (AAC) каким образом Domain (бизнес логика) может управлять отображением в View слое ? Теперь подробнее. Имеется в виду, что внутри domain: 1) вызрели некие данные, которые нужно показать; 2) сменилось состояние, на что нужно реагировать (скрыть/показать группу виджетов, вызвать новый фрагмент, показать/обновить прогресс и т.п.). И сделать это сложнее, чем просто показать сообщение или диалог, или просто LiveData запихнуть в RecyclerView. Поэтому примерами, типа hello world просьба не бросаться, там все ясно. В MVP именно это делается просто. А вот здесь, походу, удалось нащупать слабое место MVVM. Сейчас сделано, так.
Посредством RxJava2 (как вариант это м.б. LiveDataEvent из AAC) из Domain в View (через ViewModel AAC) прокидывается объект, который несет в себе тип команды (enum) и собственно имеет кучу полей для данных на все случаи жизни (разные для разных команд конечно же). И далее в View сидит switch-case по типу команды, который все это разруливает. И чувствую я, что может быть есть путь элегантнее. Но, 1) паттерн Команда здесь точно не катит, 2) паттерн Состояние мной уже реализован, и это тоже не он. Есть вариант насоздавать кучку конкретных объектов, и тогда в View будет сидеть большой if-instanceof, что то же самое. Либо вариант складировать данные для View в ViewModel AAC (для чего она вобщем-то и предназначена), а посылать из domain только тип команды, далее View берет все нужные данные из VM. Хваленый Fernando Cejas в статье “Architecting Android...Reloaded” обходит вопрос тем, что реализовывает всего 3 примитивных UseCase и всё, для которых достаточно тупо показать LiveData, но это я уже видел 1000001 раз по всему инету, спасибо. Итак: есть ли (если он есть) способ элегантнее? М.б. хитрый паттерн какой. Возможно я зря рефлексирую, и это и есть путь.
ps. И еще раз пну Fernando. В своей статейке он гордо сообщает, что заменил RxJava на LiveData, типа “делай как я”. Ну, ну. У меня например, реализовано backpressure, как хваленый Cejas собрался разруливать такой кейс?
Бро , вот мне тоже mvvm не нравиться этим. Те же вопросы мучают...
источник

ST

Sasha Tainyuk in Android arch. components
Yuriy
Для запуска фрагментов, заменил системный bundle на main ViewModel. Раньше как было: активити зовет static newInstance() у фрагмента, туда передает и пакует в бандлы аргументы, по классике. Теперь активити зовет тот же newInstance(), туда передает свою ViewModel и POJO объект с аргументами. И далее фрагмент подсоединяется к main ViewModel откуда берет   аргументы. Вроде схема работает. И что-то не могу найти в ней недостатки. Что скажете ?
Шило на мыло.) Есть ViewModelProviders
источник

ST

Sasha Tainyuk in Android arch. components
источник

AF

Alex F. in Android arch. components
Ребята, слышно ли что-гибудь про даты релиза библиотек в AndroidX?
источник
2018 September 04

Y

Yuriy in Android arch. components
Sasha Tainyuk
Шило на мыло.) Есть ViewModelProviders
Ну не совсем. Теперь я могу в новые "бандлы" целые объекты ложить
источник

K

Konstantin in Android arch. components
Yuriy
Для запуска фрагментов, заменил системный bundle на main ViewModel. Раньше как было: активити зовет static newInstance() у фрагмента, туда передает и пакует в бандлы аргументы, по классике. Теперь активити зовет тот же newInstance(), туда передает свою ViewModel и POJO объект с аргументами. И далее фрагмент подсоединяется к main ViewModel откуда берет   аргументы. Вроде схема работает. И что-то не могу найти в ней недостатки. Что скажете ?
А как это себя поведет при повороте например?
источник

ST

Sasha Tainyuk in Android arch. components
Yuriy
Ну не совсем. Теперь я могу в новые "бандлы" целые объекты ложить
А раньше что мешало? Да и как правило id прокадывают. У меня к примеру моделька для листа имеет не все поля
источник

Y

Yuriy in Android arch. components
Konstantin
А как это себя поведет при повороте например?
Точно также. Vm ведь выживает.
источник
2018 September 05

ST

Sasha Tainyuk in Android arch. components
источник

AY

Axrorxo'ja Yodgorov in Android arch. components
А это нормалний решения когда для каждого livedata нужен отделний флаг ?
источник

ST

Sasha Tainyuk in Android arch. components
Axrorxo'ja Yodgorov
А это нормалний решения когда для каждого livedata нужен отделний флаг ?
а что не так с флагами? ему как то же надо понимать что все три соурса добавлены, чтобы заимитить данные
источник

AY

Axrorxo'ja Yodgorov in Android arch. components
Sasha Tainyuk
а что не так с флагами? ему как то же надо понимать что все три соурса добавлены, чтобы заимитить данные
А если там  zip 10 параметром ? По моем это overhead
источник

ST

Sasha Tainyuk in Android arch. components
Хм... Даже не знаю что сказать. По-моему это придирка на ровном месте. Понятно что при таком количестве параметров этот подход не лучший, но я слабо себе представляю такой случай.
источник