У меня Firebase настроен так ...
{
"items" : {
"-LDJak_gdBhZQ0NSB-7B" : { //item
"name" : "Test123",
...
},
...
},
"likes" : {
"YoTjkR2ORlcr5hGedzQs5xOK2VE3" : { //user
"-LDJiY0YSraa_RhxVWXL" : true //whether or not the item is liked
},
...
}
}
И я заполняю RecyclerView
элементами, но мне нужно знать, понравился ли каждый элемент текущему пользователю.Я знаю, что могу хранить каждого пользователя, которому понравился элемент, в самом элементе, но это кажется слишком большим повторением.Но даже если бы это было сделано таким образом, мне пришлось бы проверять список пользователей, которым понравился элемент для этого конкретного пользователя, для каждого добавленного элемента.Должен ли я просто жить со всем этим повторением или есть простой способ справиться с этим?Вот код, который у меня есть, который использует FirebaseRecyclerAdapter
:
private fun setUpFirebaseAdapter() {
val ref = FirebaseDatabase.getInstance().reference
val itemQuery = ref
.child("items")
.limitToLast(20)
val itemOptions = FirebaseRecyclerOptions.Builder<Item>()
.setQuery(itemQuery, Item::class.java)
.build()
firebaseAdapter = object : FirebaseRecyclerAdapter<Item, FirebaseViewHolder>(itemOptions) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FirebaseViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_row, parent, false)
return FirebaseViewHolder(view)
}
override fun onBindViewHolder(holder: FirebaseViewHolder, position: Int, model: Item) {
holder.bindItems(model)
//...
}
}
}
Я знаю, что есть поддержка индексов, но я думаю, что это позволит мне только возвращать только понравившиеся элементы.