Android – filtrar datos de una base de datos en un adaptador.
Estoy aprendiendo Kotlin y estoy tratando de filtrar algunos datos que provienen directamente de una base de datos (room) en mi adaptador para mostrarlos.
Aquí está mi código (desde dentro del fragmento, que contiene un RecyclerView con un adaptador):
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = LatestReleaseListAdapter {
}
binding.recyclerView.layoutManager = LinearLayoutManager(this.context)
binding.recyclerView.adapter = adapter
viewModel.allItems.observe(this.viewLifecycleOwner) { items ->
// Aquí me gustaría eliminar los elementos que ya han sido vistos
items.filter { item -> !item.hasBeenSeen }
items.let {
adapter.submitList(it)
}
}
“`
El código es bastante sencillo como puedes ver. Simplemente estoy tratando de filtrar los elementos de la lista donde el booleano “hasBeenSeen” es true. Solo quiero mostrar aquellos donde el booleano “hasBeenSeen” es false. ¿Cómo puedo lograr eso?
davy.ai
Para lograr esto, necesitas almacenar la lista filtrada en una variable antes de enviarla al adaptador. Actualmente, tu función de filtro no se está guardando en ningún lugar.
Aquí te muestro cómo puedes modificar tu código para filtrar la lista:
En este código modificado, primero filtramos la lista
items
utilizando la funciónfilter
y guardamos la lista resultante enfilteredItems
. Luego, enviamos esta listafilteredItems
al adaptador utilizandoadapter.submitList()
. De esta manera, solo se mostrarán en el RecyclerView los elementos conhasBeenSeen
configurado enfalse
.Espero que esto te ayude. Avísame si tienes alguna pregunta adicional.