Android: установка LiveData в ViewModel из службы

То, как я настроил свое приложение, заключается в том, что Услуга будет получать некоторую информацию в фоновом режиме, которую необходимо получить в реальном времени с помощью Фрагмент, а затем отобразить ее в представлении. Для этого Я помещаю данные в ViewModel и позволяю моему фрагменту наблюдать за LiveData в ViewModel.

Проблема в том, что у меня возникла проблема установка/изменение LiveData внутри класса ViewModel из службы. Похоже, что ViewModel предназначен для использования между действиями и фрагментами, и я не могу получить ViewModel внутри своей службы, чтобы изменить значение, которое должно наблюдаться моим фрагментом. Есть ли способ реализовать это?

0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вероятно, вы захотите использовать репозиторий с собственным полем MutableLiveData, которое изменяется в вашей службе. Затем ваша ViewModel будет иметь поле MutableLiveData, указывающее на поле Repository, и ваш фрагмент сможет наблюдать за этим полем.

Фрагмент:

...
viewModel.myData.observe(viewLifecycleOwner) { myData ->
    // handle new data observed
}
...

ViewModel:

// Need to clear repo reference in [onCleared] to avoid resource leaks
private var _myData: MutableLiveData<MyData>? = myRepo.myData
val myData: MutableLiveData<MyData> = _myData
...
override fun onCleared() {
    super.onCleared()
    _myData = null
}

Репозиторий:

val myData = MutableLiveData<MyData>() // or whatever source (Room, etc.)

Услуга:

...
Repository.getInstance().myData.postValue(/* some new info */)
...

Другие вопросы по теме