在查询数据库时,如何在FirebaseUI RecylerAdapter中设置过滤器?

时间:2018-04-17 06:29:41

标签: firebase firebase-realtime-database kotlin recycler-adapter firebaseui

我使用FirebaseDatabase来保存“类别”和相关的“详细信息”,如下所示:

firebaseDatabase

注意:“类别”中的categoryId充当“详细信息”的主键。

My DetailAdapter使用此查询与FirebaseUI的RecyclerAdapter配合使用:

class DetailAdapter(lifecycleOwner: LifecycleOwner, private val categoryId: String) : FirebaseRecyclerAdapter<Detail, DetailAdapter.DetailHolder>(buildOptions(lifecycleOwner, categoryId)) {

companion object {
    private fun buildQuery(categoryId: String) = FirebaseDatabase.getInstance()
            .reference
            .child("").child("details").child(categoryId)
            .limitToLast(50)

    private fun buildOptions(lifecycleOwner: LifecycleOwner, categoryId: String) = FirebaseRecyclerOptions.Builder<Detail>()
            .setQuery(buildQuery(categoryId), Detail::class.java)
            .setLifecycleOwner(lifecycleOwner)
            .build()
}
...

这完美无瑕 现在我想编写一个类似的Adapter(即名为“FavoritesAdapter”),以便只显示“favorite:[set to] true”的“details”。我可以使用buildQuery来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

无法使用 buildQuery 来实现此目的。解决方案的关键是一种称为非规范化的策略,这是一种礼貌的方式来说明&#34;复制数据&#34; 。您可能需要观看此解释:Denormalization is normal with Firebase Database