如何在 Firestore RecylerView (Firestore UI) 中过滤和排序我的文档?

Posted

技术标签:

【中文标题】如何在 Firestore RecylerView (Firestore UI) 中过滤和排序我的文档?【英文标题】:How can I filter and sort my documents in Firestore RecylerView (Firestore UI)? 【发布时间】:2021-10-30 21:56:13 【问题描述】:

我想像下面的代码那样对我的文档进行排序和过滤。但它没有用。实际上,当我添加新文档时,我无法实时看到它。

val query: Query = FirebaseFirestore.getInstance()
            .collection("Lessons")
            .whereEqualTo("tag",tag)
            .orderBy("order",Query.Direction.ASCENDING)


        val options: FirestoreRecyclerOptions<Model> = FirestoreRecyclerOptions.Builder<Model>()
            .setQuery(query, Model::class.java)
            .build()

        adapter = KonuRecyclerAdapter(options,tag,konuBasligi)
        binding?.konularAnaRecyclerView?.adapter = adapter

但是当我评论“whereEqualto”行时,我可以看到新文档(新添加的)。之后,如果我再次取消注释该行,我也可以看到这个文档。我希望当我添加一个新文档时它会实时显示。请帮我解决这个问题。你可以警告我我犯的任何错误。任何帮助将不胜感激!!!

【问题讨论】:

【参考方案1】:

据我所知,您正在尝试使用包含以下调用的查询:

.whereEqualTo("tag",tag)

.orderBy("order",Query.Direction.ASCENDING)

在不同的领域。这种查询需要索引。要了解如何解决此问题,请参阅我在以下帖子中的回答:

Firestore whereEqualTo, orderBy and limit(1) not working

但是,在没有排序的情况下调用 .whereEqualTo() 或在没有 .whereEqualTo() 调用的情况下调用 .orderBy() 不需要索引。这就是为什么当您评论一个或另一个方法调用时它起作用的原因。

【讨论】:

但是当我想创建这些索引的时候,它看起来像标签升序顺序升序,但我的“标签”字段都是一样的。为什么这个过滤器(标签)看起来“升序”??? 当您在查询中使用“标签”字段时未指定顺序和方向时,会设置默认(升序)。但是,如果您需要另一个订单,您应该考虑通过“标记”调用添加一个额外的订单。 我想,你误会了我。我的文件是这样的; “课程”=“数学”,“标签”=“数字”////“课程”=“科学”,“标签”=“数字”/////“课程”=“文学”,“标签” =“语言”/////“课程”=“历史”,“标签”=“语言”。我想按标签而不是排序过滤这些文档。我的意思是过滤。你现在得到我了吗?感谢您的帮助 我很明白你想说什么。即使您没有“按标签”创建显式顺序,当您使用.whereEqualTo("tag",tag) 并创建索引时,自动添加的按标签排序,默认升序方向。你无法改变这一点。现在清楚了吗? 肯定会的。

以上是关于如何在 Firestore RecylerView (Firestore UI) 中过滤和排序我的文档?的主要内容,如果未能解决你的问题,请参考以下文章

Android-RecylerView控件

如何在片段内的 recylerview 列表中显示 SQLite 数据库数据?

XamarinAndroid组件教程RecylerView适配器动画动画种类

recylerView 未显示在应用程序中

RecylerView 的 onScrollChanged() 在 Android 中未检测到屏幕底部

RecylerView完美实现瀑布流效果