我想在ProfileViewModel
中观察一个currentUser: LiveData<User>
属性(由UserRepository
公开)以更新user: User
属性。此属性通过数据绑定绑定到 UI,并在发生更改时更新 UI。这是我的假设。
我尝试使用转换设置user
属性,但它不起作用。
一些代码?DatabaseService.kt
fun getById(documentId: String): MutableLiveData<T> {
val resultObj = MutableLiveData<T>()
db.collection(className)
.document(documentId)
.get()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
val obj = task.result?.toObject(modelClass)
resultObj.value = obj
} else {
Log.d(TAG, task.exception?.localizedMessage)
}
}
return resultObj;
}
UserRepository.kt
fun getCurrentUser(): LiveData<User> {
return this.getById(FirebaseAuthService.userUid)
}
ProfileViewModel.kt
// This doesn't work.
val userRep = UserRepository();
var user: User = User()
init {
Transformations.map(userRep.getCurrentUser()) { firebaseUser ->
user = firebaseUser;
}
}
user: User
属性绑定到 UI。如何使用实时数据对象的值更新此属性。我不想在片段中观察userRep.getCurrentUser()
并保留对 UI 组件的引用并在发生更改时进行更新。
当属性user
更改时,视图不会更新,因为它不知道它已更改。尝试使用MutableLiveData<User>
:
ProfileViewModel.kt
val userRep = UserRepository();
val user = MutableLiveData<User>(User())
init {
Transformations.map(userRep.getCurrentUser()) { firebaseUser ->
user.postValue(firebaseUser);
}
}
这样做,视图将更新,因为user
属性中使用的LiveData
将通知其对其更改。