Как наблюдать данные из фрагмента

Я наблюдаю, вошел ли пользователь в систему. Если они вошли в систему, то заголовок навигации 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()
    })   

}

Я попытался обновить фрагменты, создав экземпляр класса и используя эту функцию, но я вырезал этих наблюдателей отдельно (с «этим» на основном и «lifeCycleOwner» на фрагментах), но тоже не работает.

Как мне это сделать ?

у вас есть user_name и user_surname в макете фрагмента или макете активности?

Zain 19.12.2020 00:37

в макете активности я также использую их, например, mainActivity.user_name

fariji1294 19.12.2020 00:43
1
2
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

в LoginFragment вы не можете вызывать методы в MainActivity, создавая экземпляр активности таким образом

val mainActivity = MainActivity()
mainActivity.updateUI()

Но вы можете вызвать его с помощью activity и привести к MainActivity

(activity as MainActivity).updateUI()

должно ли это заставить этот updateUI работать во фрагменте или что

fariji1294 19.12.2020 19:33

это будет вызываться из фрагмента; но поскольку и фрагмент, и активность хостинга находятся в состоянии onResume, то это не имеет значения, или это зависит от вашего необходимого дизайна, если есть несколько фрагментов, которые будут вызывать updateUI(), оставьте их в действии, чтобы избежать повторения кода

Zain 19.12.2020 20:48

Другие вопросы по теме