观察本地对象更改的LiveData属性

时间:2019-01-19 04:24:55

标签: android kotlin android-room android-livedata

我有一个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.firstNameuser.lastName设置为一个值,则fullName属性将不会得到通知和更新。仅当我将user更新到会议室数据库时,它才会反映对fullName的更改。我希望fullName反映对user.firstNameuser.lastName的任何本地更改,而不更新会议室数据库。

我成功实现了这一目标,方法是将fullName更改为MutableLiveData并在firstNamelastName的更改中进行更新,但是我对解决方案不满意,因为它需要{我希望避免在活动中观察到{1}}和firstName,这对我来说似乎很棘手。

有没有办法做到这一点?

0 个答案:

没有答案