Соблюдайте свойство LiveData при изменениях локальных объектов - PullRequest
0 голосов
/ 19 января 2019

У меня есть 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 быть замеченным в деятельности, которую я хочу избежать, и это кажется мне хакерским.

Есть ли способ достичь этого?

...