Size: a a a

Android arch. components

2018 July 06

PS

Pavel Sukhoterin in Android arch. components
Andrey Gaysin
Всем привет! Подскажите, пожалуйста, как правильно связать 2 разные viewmodel?
Можешь описать решаемую задачу? Я просто не встречал нигде два связанных VM
источник

AG

Andrey Gaysin in Android arch. components
Есть 2 фрагмента, A и B. У фрагмента А есть фрагменты 1, 2, 3. Для фрагментов А и В есть свои viewmodel. И вот надо что бы событие во фрагменте А вызвало событие во фрагменте В.
источник

AG

Andrey Gaysin in Android arch. components
Точнее событие во viewmodel для фрагмента А вызывало событие viewmodel для фрагмента В
источник

AT

Alexander T in Android arch. components
Andrey Gaysin
Точнее событие во viewmodel для фрагмента А вызывало событие viewmodel для фрагмента В
Можно внутри фрагментов достать ViewModel общего родителя, и через неё связать их. Но, зачастую это не нужно, и лучше связаться через реактивную модель(Бд). Какой у вас кейс?
источник

AG

Andrey Gaysin in Android arch. components
вот у меня тоже естьмысль связать их через какой-нибудь интерактор
источник

PS

Pavel Sukhoterin in Android arch. components
источник

AG

Andrey Gaysin in Android arch. components
тут получится что общение между 2-мя viewmodel будет происходить через фрагмент...
источник

PS

Pavel Sukhoterin in Android arch. components
Andrey Gaysin
тут получится что общение между 2-мя viewmodel будет происходить через фрагмент...
Не подходит для вашего кейса?
источник

AG

Andrey Gaysin in Android arch. components
Смущает немного такая реализация
источник

AT

Alexander T in Android arch. components
Andrey Gaysin
тут получится что общение между 2-мя viewmodel будет происходить через фрагмент...
Фрагмент нужен только для того, чтобы связать изначально их. Воспринимайте фрагмент как владельца скоупа в контейнере зависимостей. Чтобы связать два независимых скоупа(фрагмент A и B) вам так или иначе нужно получить родительский(парентФрагмент если есть, или активити). Но опять же, не решается ли ваша проблема через observable из базы данных? Какие у вас события нужно передавать?
источник

AG

Andrey Gaysin in Android arch. components
в одном фрагменте происходит выбор элемента, а во втором отображается его подробная информация в его дочерних фрагментах
источник

AG

Andrey Gaysin in Android arch. components
с возможностью редактирования
источник

A

Aleksey in Android arch. components
А зачем этим фрагментам разные вьюмодель делать?
источник

PS

Pavel Sukhoterin in Android arch. components
Andrey Gaysin
в одном фрагменте происходит выбор элемента, а во втором отображается его подробная информация в его дочерних фрагментах
Master / Detail фрагменты, Google рекомендует делать как в ссылке выше
источник

AG

Andrey Gaysin in Android arch. components
Pavel Sukhoterin
Master / Detail фрагменты, Google рекомендует делать как в ссылке выше
вот как раз первые 2 фрагмента у меня так и связаны, а для дочерних фрагментов второго фрагмента я хотел сделать свою вьюмодель
источник

PS

Pavel Sukhoterin in Android arch. components
Andrey Gaysin
вот как раз первые 2 фрагмента у меня так и связаны, а для дочерних фрагментов второго фрагмента я хотел сделать свою вьюмодель
Ты же можешь через LiveData кинуть изменение, которое тебе нужно сделать в дочерних фрагментах
источник

AG

Andrey Gaysin in Android arch. components
да, сейчас так и делаю… просто хотел понять на сколько это правильный подход
источник
2018 July 07

DR

Dmitry Repin in Android arch. components
Писал несколько дней назад по поводу того, что не обсервилась livedata. она тогда действительно обсервилась и проблема была в том, что не обновлялся айдишник в запросе, пришлось сделать функцию, где нужной livedata при обновлении id присваивался новый инстанс. Теперь всё работает, но само решение мне кажется кривым. Подскажите, у кого опыта больше, как можно сделать элегантнее? Оставлю тут вью модель:
class MainViewModel(application: Application) : ViewModel(){

   private val repository: Repository = Repository(application)
   var projects: LiveData<List<Project>> = repository.getProjects()
   var selectedProjectId: Long = 1
       set(value) {
           field = value
           tasks = repository.getTasks(value)
       }
   var tasks: LiveData<List<ToDoTask>> = repository.getTasks(selectedProjectId)

   fun insertProject(project: Project) = repository.insertProject(project)

   fun deleteProject(project: Project) = repository.removeProject(project)

   fun updateTask(task: ToDoTask) = repository.updateTask(task)

   fun deleteTask(task: ToDoTask) = repository.removeTask(task)

   fun insertTask(task: ToDoTask) = repository.insertTask(task)
}
источник

DR

Dmitry Repin in Android arch. components
Только сейчас понял, что кривое как минимум потому, что лучше вместо этой функции переопределить сеттер (Поправил в коде)
источник
2018 July 09

ST

Sasha Tainyuk in Android arch. components
народ, а кто нибудь юзает иксовые саппорты и навигацию?
источник