我正在观察用户是否已登录。如果他们已登录,则导航标题 name
和 surname
应更新。
这是代码片段。它仅适用于活动类。我想做同样的事情,但在片段中,但当我这样做时,它不起作用。
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()
})
}
我尝试通过创建类的实例并使用此函数来更新片段,但我单独剪切了这些观察者(在主片段上使用“this”,在片段上使用“lifeCycleOwner
”)但也不起作用。
我该怎么做?
答案 0 :(得分:1)
在 LoginFragment
中,您无法通过以这种方式实例化 Activity 来调用 MainActivity
中的方法
val mainActivity = MainActivity()
mainActivity.updateUI()
但是您可以使用 activity
调用它并将其转换为 MainActivity
(activity as MainActivity).updateUI()