观察视图模型中的实时数据,以通过属性绑定更新 UI



我想在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将通知其对其更改。

最新更新