Обмен данными между ViewModels - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть сложный экран в моем проекте, который я разбиваю на несколько фрагментов.Я пытаюсь следовать архитектуре MVVM для этих классов, поэтому у каждого фрагмента есть свой класс ViewModel и класс Contract.

Проблема заключается в том, что всем ViewModels требуется один и тот же экземпляр объекта (назовем его Book) для выполнения транзакций Room.

Есть ли правильный способ обмена данными (или LiveData) между ViewModels?Я знаю концепцию Shared ViewModel, но не знаю, смогу ли я применить ее в этом случае.Я также подумал об использовании MediatorLiveData, но не получил хорошего подхода к нему.

Я думаю о наличии класса (давайте назовем BookObservableProvider) с LiveData<Book> (или Rx Subject<Book>), где каждый ViewModel внедряет один и тот же экземпляр и всегда загружает / обновляет одно и то же значение.

Это хороший подход?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы должны разделить эти данные между фрагментами / действиями (возможно, используя Intents для действий), а затем обработать эти данные другой ViewModel

0 голосов
/ 08 февраля 2019

По моему личному мнению, ваш подход неплох для этой ситуации, но если вы хотите попробовать что-то еще, я могу посоветовать вам метод RxBus.Вот отличная статья об этом.При таком подходе вы можете просто публиковать данные в деятельности, которые содержат фрагменты, а затем прослушивать это конкретное событие во всех ваших фрагментах.

Что-то вроде:

//Activity
RxBus.publish(RxEvent.EventOnBookProvide(bookObject)

и

//Fragment
RxBus.listen(RxEvent.EventOnBookProvide::class.java).subscribe {
        useObject(it)
    }

И не забудьте использовать Disposable и .dispose () в onDestroy () при использовании Activity и onDestroyView () при использовании фрагмента.

...