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() } 
  • En Android Java / Kotlin, ¿la implementación de una interfaz le da acceso directo a las variables locales de la class de anidación?
  • En objects receptores Kotlin y extensiones
  • ¿Cuál es el nombre correcto para la documentation en línea de Kotlin?
  • iniciar bash con contacto como vCard en cadena
  • Kotlin: function genérica como tipo de retorno?
  • ¿Accediendo a los parameters a los parameters funcionales?
  • Deserializar un campo que puede ser uno de dos types de datos utilizando Moshi
  • Error de la database de la sala con la class de datos Kotlin
  • ¿Cómo debo configurar un proyecto web usando Kotlin en el back-end y en el browser?
  • proyecto kotlin no puede ser construido en gradle
  • El ícono de la aplicación no se muestra en dispositivos con una versión de Android superior a 4.4.2