如何从片段观察数据

时间:2020-12-18 23:29:16

标签: android kotlin android-fragments

我正在观察用户是否已登录。如果他们已登录,则导航标题 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()
    })   

}

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

>

我该怎么做?

1 个答案:

答案 0 :(得分:1)

LoginFragment 中,您无法通过以这种方式实例化 Activity 来调用 MainActivity 中的方法

val mainActivity = MainActivity()
mainActivity.updateUI()

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

(activity as MainActivity).updateUI()