Заполнение RecyclerView двумя наборами данных из Firebase - PullRequest
0 голосов
/ 29 мая 2018

У меня 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)
                //...
            }
        }
    }

Я знаю, что есть поддержка индексов, но я думаю, что это позволит мне только возвращать только понравившиеся элементы.

1 Ответ

0 голосов
/ 29 мая 2018

Но это кажется слишком большим повторением.

Да, это так.

Должен ли я просто жить со всеми этими повторениями или есть липростой способ справиться с этим?

Да, вы должны!

В таких случаях, как у вас, вы должны использовать эту технику, которая названа в Firebase denormalization, и для этогоЯ рекомендую вам посмотреть этот учебник, Денормализация нормальна для базы данных Firebase , для лучшего понимания.

Итак, в том, что вы делаете, нет ничего плохого, кроме того, что это обычная практикакогда дело доходит до Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...