1) Если для нескольких представлений требуются разные части данных LiveData, чтобы использовать Transformations для сопоставления одной LiveData с несколькими Sub LiveDatas. например, мне нужно имя пользователя от пользователя в одном представлении и возраст пользователя от другого представления.
Преобразование LiveData
LiveData<User> userLiveData = ...;
LiveData<String> userName = Transformations.map(userLiveData, user -> {
user.name + " " + user.lastName
});
2) Но если ваши представления основаны на в другом состоянии, например, УСПЕХ - СБОЙ - ЗАГРУЗКА Используйте Single LiveData с классом данных MyResponse.
data class MyResponse<T>(
var status: Status,
var data: T? = null,
var throwable: Throwable? = null
) {
companion object {
fun <T> loading(data: T?=null): MyResponse<T> {
return MyResponse(
status = Status.LOADING,
data = data
)
}
fun <T> success(data: T): MyResponse<T>? {
return MyResponse(
status = Status.SUCCESS,
data = data
)
}
fun <T> failed(throwable: Throwable): MyResponse<T> {
return MyResponse(
status = Status.FAILED,
throwable = throwable
)
}
}
}
enum class Status {
LOADING,
SUCCESS,
FAILED,
}
И в вашей ViewModel
val mSettingHeaderLiveData = MutableLiveData<MyResponse<UserInfo>>()
Пример использования
mSettingMainViewModel.mSettingHeaderLiveData.observe(this, Observer { userInfoResponse ->
if (userInfoResponse.status == Status.SUCCESS) {
// Do something on View_1
} else if (userInfoResponse.status == Status.Failed) {
// Do something on View_2
} else if (userInfoResponse.status == Status.Loading) {
// Do something on View_3
}
})