Diseño de consulta de database de Firebase

Básicamente, tengo una list de inputs que muchos usuarios pueden leer (pero no pueden escribir). Estos elementos aparecen orderados en la aplicación en function de un integer único que tiene cada input. Me gustaría agregar una forma de permitir que cada usuario individual prefiera un número x de estos elementos, haciendo que esos x elementos aparezcan primero en la list. ¿Hay alguna manera de lograr esto utilizando la consulta de firebase sin tener que duplicar la list para cada usuario?

En lugar de utilizar FirebaseRecyclerAdapter y simplemente pasar la consulta (que es lo que hacía antes), tuve que administrar manualmente los resultados y utilizar un RecyclerView.Adapter lugar. Este es el código con el que terminé. Lo limpiaré un poco para que realmente reemplace los elementos si ya están allí y actualice y todo eso, pero este es un resumen rápido del enfoque necesario:

 val data = ArrayList<SomeData> val favorites = ArrayList<Favorite> val dataWithFavorites = ArrayList<SomeData> private val dbRef : DatabaseReference by lazy { FirebaseDatabase.getInstance().reference } private val dataQuery : Query by lazy { dbRef.child("data").orderByChild("rank") } private val favoritesQuery : Query by lazy { dbRef.child("users").child("$someUserId").child("favorites").orderByChild("name") } init { dataQuery.addValueEventListener(object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { } override fun onDataChange(p0: DataSnapshot?) { data.clear() p0!!.children.mapTo(dataList) { it.getValue(SomeData::class.java)!! } updateEntries() } }) favoritesQuery.addValueEventListener(object : ValueEventListener { override fun onCancelled(p0: DatabaseError?) { } override fun onDataChange(p0: DataSnapshot?) { favorites.clear() p0!!.children.mapTo(dataList) { it.getValue(Favorite::class.java)!! } updateEntries() } }) } private fun updateEntries() { if (data.isEmpty()) { return } val favoritesStrings = favorites.map { (id) -> id } val favoriteData = data .filter { favoritesStrings.contains(it.id) } .sortedBy { it.name } .onEach { it.isFavorite = true } dataWithFavorites.clear() dataWithFavorites.addAll(data) dataWithFavorites.removeAll(favoriteData) dataWithFavorites.forEach { it.isFavorite = false } dataWithFavorites.addAll(0, favoriteData) recyclerView.adapter?.notifyDataSetChanged() } 
  • Algoritmo de alignment / alignment de alignment encontrado en constructores de GUI
  • ¿Cómo crear una variable que pueda tomar cadenas y funciones en Kotlin?
  • IncompleteAnnotationException: dagger. Proporciona el tipo de elemento faltante
  • ¿Kotlin no se puede anular valor puede ser nulo?
  • Encuentra los usos del constructor primario de una class Kotlin
  • ¿Cómo acceder a CalendarProvider con Room?
  • Error ClassNotFoundException para el proyecto Kotlin (no Android) en Android Studio
  • cómo descartar DialogFragment de lambda especificado en el llamador Kotlin
  • Cómo se opone Kotlin y objects complementarios y perezosos funciona con memory
  • Kotlin equivalente nativo de Retrofit
  • Permisosdispatcher y múltiples @ NeedsPermission con kotlin