我有一个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
的更改中进行更新,但是我对解决方案不满意,因为它需要{我希望避免在活动中观察到{1}}和firstName
,这对我来说似乎很棘手。
有没有办法做到这一点?