У меня есть ViewModel, которая инкапсулирует профиль пользователя, который поддерживается объектом Room Entity. В настоящее время я хочу наблюдать за изменениями имени и фамилии пользователя в ViewModel без необходимости обновлять сущность комнаты пользователя через свойство полного имени:
class UserViewModel(application: Application): AndroidViewModel(application) {
...
private val repository = UserRepository(application)
val user: LiveData<UserRoomEntity> = userRepository.getUser()
// Note: have created extension methods for switchMap and toLiveData()
val fullName: LiveData<String>
get() = user.switchMap { it.calculateFullName().toLiveData() }
...
}
Если установить значение user.firstName
или user.lastName
, свойство fullName
не будет уведомлено и обновлено. Только когда я обновлю user
в Базе данных комнат, она отразит изменения в fullName
. Я хочу, чтобы fullName
отражал любые локальные изменения на user.firstName
и user.lastName
без обновления базы данных комнат.
Я добился успеха в достижении этого путем изменения fullName
на MutableLiveData и обновления его на firstName
и lastName
изменениях, но я не доволен решением, поскольку оно требует firstName
и lastName
быть замеченным в деятельности, которую я хочу избежать, и это кажется мне хакерским.
Есть ли способ достичь этого?