Как я могу поделиться LiveData между несколькими ViewModels? - PullRequest
1 голос
/ 27 марта 2019

Я пытался извлечь значение в базовый класс и расширить его с помощью ViewModels.Однако когда я это делаю, Обозреватель не придерживается LiveData.Например, когда у меня есть родительский класс с LiveData:

class Base : ViewModel() { 
    private val _ data = MutableLiveData()
    val data: LiveData = _data

    fun someEvent(foo: Foo) { // update _data }
}

class Derived : Base()

class Derived1 : Base()

, тогда возьмите одну из этих моделей представления и наблюдайте data:

class Frag : Fragment {
    onViewCreated() {
        // get Derived, ViewModelProviders.of ...etc
       derived.data.observe { // Doesn't observe changes }
    }
}

Вызов Base.someEvent(foo) не уведомляетLiveData во фрагменте.

Я хочу избежать получения ссылки на оба подкласса и вызова someEvent для каждого.Следует отметить, что я использую один подход Activity, и все ViewModel имеют область действия Activity.

1 Ответ

1 голос
/ 27 марта 2019
class Derived : Base()

и

class Derived1 : Base()

имеют свой собственный экземпляр:

private val _ data = MutableLiveData()
val data: LiveData = _data

это означает, что вам нужно

derived.data.observe { // do something }
derived1.data.observer { // do something }
derived.someEvent(someFoo)
derived1.someEvent(someFoo)

Вы пытаетесь достичь чего-то неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...