如何从片段中观察数据



我正在观察用户是否已登录。如果他们已登录,则导航标头namesurname应该更新。

这是一段代码。它只适用于活动类。我想做同样的事情,但在片段中,但当我做的时候,它不起作用。

fun updateUI(){
println("Updating UI")
database = FirebaseDatabase.getInstance().reference
mAuth = FirebaseAuth.getInstance()

if(mAuth.currentUser!=null){

database.child("users").child(mAuth.currentUser?.uid.toString()).addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
println("User found")
mutable_name.postValue(snapshot.child("name").value.toString())
mutable_surname.postValue(snapshot.child("surname").value.toString())
} else {
println("User not found")
mutable_name.postValue("Guest")
mutable_surname.postValue("")
}
}
override fun onCancelled(error: DatabaseError) {
println(error.message)
}
})
}else{
println("User not signed in")
mutable_name.postValue("Guest")
mutable_surname.postValue("")
}
name.observe(this, {
user_name.text = it.toString()
})
surname.observe(this, {
user_surname.text = it.toString()
})   
}

我尝试通过创建类的实例并使用此函数来更新片段,但我分别剪切了这些观察者(在main上使用"this",在片段上使用"lifeCycleOwner"(,但也不起作用。

我该怎么做?

LoginFragment中,您不能通过以下方式实例化活动来调用MainActivity中的方法

val mainActivity = MainActivity()
mainActivity.updateUI()

但您可以使用activity调用它,并将其强制转换为MainActivity

(activity as MainActivity).updateUI()

最新更新