Los datos de RecyclerView no se muestran.
Soy nuevo en Kotlin, tengo este código Kotlin, los datos cargados no se muestran al principio, pero después de navegar a otra actividad y regresar, los datos aparecen.
En línea he verificado y dicen que se debe agregar notifyOnChanged
, pero no puedo implementarlo, si sabes cómo agregar notifyOnChanged
u otra solución, por favor ayúdame.
“`java
class SecretsActivity : AppCompatActivity() {
lateinit var bind : ActivitySecretsBinding
override fun onCreate(savedInstanceState: Bundle?) {
val secretsList = firebaseSecretsData()
super.onCreate(savedInstanceState)
bind = ActivitySecretsBinding.inflate(layoutInflater)
setContentView(bind.root)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
bind.secretsRecyclerView.layoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
bind.secretsRecyclerView.setHasFixedSize(true)
bind.secretsRecyclerView.adapter = SecretsAdapter(secretsList)
<pre><code> bind.ButtonWrite.setOnClickListener {
val intent = Intent(this, WriteActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
}
override fun onBackPressed() {
super.onBackPressed()
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
overridePendingTransition(R.transition.fadein, R.transition.fadeout)
finish()
}
private fun firebaseSecretsData() : List<SecretsModel>{
val list = ArrayList<SecretsModel>()
val dbref = FirebaseDatabase.getInstance().getReference("Secrets")
dbref.addValueEventListener(object : ValueEventListener{
override fun onDataChange(snapshot: DataSnapshot) {
if(snapshot.exists()){
for(i in snapshot.children){
val item = SecretsModel(i.value.toString())
list+=item
}
}
}
override fun onCancelled(error: DatabaseError) {
TODO("Not yet implemented")
}
})
return list
}
</code></pre>
}
“`
davy.ai
Para agregar el método
notifyOnChanged
al código actual, necesitamos modificar la funciónfirebaseSecretsData()
para que devuelva un objetoLiveData
en lugar de una lista y también actualizar el adaptador para elRecyclerView
para observar los cambios en el objetoLiveData
.Aquí está la implementación actualizada:
Explicación:
MutableLiveData
para contener la lista de objetosSecretsModel
, que se puede observar para detectar cambios.onCreate()
, configuramos elRecyclerView
con un administrador de diseño y también observamos los cambios ensecretsList
. Sin embargo, todavía no establecemos el adaptador porque los datos no se cargan en este momento.firebaseSecretsData()
dentro defetchData()
y la modificamos para actualizar el objetosecretsList
cada vez que se reciben nuevos datos de Firebase. UsamosaddValueEventListener()
para escuchar los cambios en la base de datos de Firebase.onDataChange()
. Después de agregar cada elemento a la lista, usamos la funciónmutableListOf()
para crear una lista mutable que se puede actualizar, y luego asignamos la lista resultante asecretsList
utilizando la propiedadvalue
de la claseMutableLiveData
.fetchData()
en el métodoonResume()
para que se llame cada vez que se reanude la actividad, lo que asegura que se carguen nuevos datos cada vez que el usuario regrese de otra actividad.