Идея состоит в том, чтобы иметь Singleton Репозиторий , который разделяет LiveData между потребителями ( ViewModels ).
class SharedLiveDataRepository(val dataSource: MyDataSource) {
// This LiveData is shared across consumers
private val result = MutableLiveData<Long>()
fun loadData(): LiveData<Long> {
if (result.value == null) {
result.value = dataSource.getData()
}
return result
}
}
Если по какой-то причине вы хотите обновить данные, метод loadItem
может выглядеть следующим образом
fun loadData(refresh: Boolean = false): LiveData<Long> {
if (refresh == true) {
result.value = null
}
if (result.value == null) {
result.value = dataSource.getData()
}
return result
}
Обратите внимание: Для обновления данных этовозможно увидеть сбой.
Представьте себе сценарий, когда происходит переход между двумя действиями, и первое наблюдает за LiveData, а второе начинает обновлять его.
Я думаю, что решение для вышеупомянутогопроблема заключается в том, чтобы выполнить обновление в первом действии, а затем перейти к следующему.