android - 如何从片段中观察数据
问题描述
我正在观察用户是否已登录。如果他们已登录,则导航标题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
在片段上使用“”)但也不起作用。
我应该怎么做?
解决方案
因为LoginFragment
你不能通过MainActivity
这种方式实例化活动来调用方法
val mainActivity = MainActivity()
mainActivity.updateUI()
但是您可以通过 using 调用它activity
并将其转换为MainActivity
(activity as MainActivity).updateUI()
推荐阅读
- python - 删除后列表中仍为零(Python)
- python - 在 C 中通过管道调用的 Python 代码不起作用,并引发错误
- javascript - 如何在jQuery中获取属性值?
- caching - Apache 无缓存标志
- asp.net - 为什么应用程序 user.id 与 _db.Users id 不同
- oracle - Oracle xmlTransform 返回 SQL 错误 [6502] [65000]: ORA-06502: PL/SQL: numeric or value error: 字符串缓冲区太小
- ruby - Cocoapods pod 初始化
- python - 在矩阵 Python 中迭代
- python - 如何通过从数据框分组来创建箱线图?[Python]
- java - 使用 spring-boot-maven-plugin 创建 docker 映像运行命令行参数,例如“apt-get install libfontconfig1”