首页 > 解决方案 > 如何从片段中观察数据

问题描述

我正在观察用户是否已登录。如果他们已登录,则导航标题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在片段上使用“”)但也不起作用。

我应该怎么做?

标签: androidkotlinandroid-fragments

解决方案


因为LoginFragment你不能通过MainActivity这种方式实例化活动来调用方法

val mainActivity = MainActivity()
mainActivity.updateUI()

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

(activity as MainActivity).updateUI()

推荐阅读