Я наблюдаю, вошел ли пользователь в систему. Если они вошли в систему, то заголовок навигации 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
» на фрагментах), но тоже не работает.
Как мне это сделать ?
в макете активности я также использую их, например, mainActivity.user_name
в LoginFragment
вы не можете вызывать методы в MainActivity
, создавая экземпляр активности таким образом
val mainActivity = MainActivity()
mainActivity.updateUI()
Но вы можете вызвать его с помощью activity
и привести к MainActivity
(activity as MainActivity).updateUI()
должно ли это заставить этот updateUI работать во фрагменте или что
это будет вызываться из фрагмента; но поскольку и фрагмент, и активность хостинга находятся в состоянии onResume
, то это не имеет значения, или это зависит от вашего необходимого дизайна, если есть несколько фрагментов, которые будут вызывать updateUI()
, оставьте их в действии, чтобы избежать повторения кода
у вас есть
user_name
иuser_surname
в макете фрагмента или макете активности?