java - 如何在recyclerview firebase中动态更改limitToFirst()?

标签 java android firebase firebase-realtime-database

这里我在recyclerview中设置了firebase适配器。 我在其中使用了这样的查询。

Query sortPost=PostRef.orderByChild("count").limitToFirst(firstTenPost);

在第一个TenPost中是int变量。现在我想通过一些检测动态改变它的值。

举个例子, 假设我在 recyclerview 之外有按钮,并且如果我在按钮上设置 onClickListner,那么它应该是这样的,

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                //here, can i change the value of firstTenPost variable//
                  firstTenPost=firstTenPost+10;


            }
        });

那么这可能吗?如果是,请解释一下

最佳答案

Firebase 实时数据库不支持偏移量查询。因此,虽然您可以说“给我匹配这些条件的前 10 个节点”,但您不能稍后说“给我接下来的 10 个节点”。

实现分页的两个广泛选项是:

  1. 使用不断增长的页面大小。因此,当您显示第一页时,您使用 limitToFirst(10),然后对于第二页,您使用 limitToFirst(20),依此类推。

    PostRef.orderByChild("count").limitToFirst(20);
    

    这非常简单,但确实会导致您读取比后续页面所需的更多数据。通常这不是一个大问题,只要用户不向下浏览太多页面即可。

  2. Firebase 的查询模型基于 anchor 文档。因此,虽然您不能说“跳过 10 个节点”,但您可以告诉查询从特定节点开始。

    因此,如果您知道第一页的最后一个节点,则可以创建一个查询来检索第 1 页的最后一个节点,然后检索接下来的 10 个节点。为此,您需要知道 count 值(您订购的属性)以及上一页上最​​后一个节点的键。

    假设第 1 页上的最后一个节点的计数等于 100,并且键 -Ldfo731rl,您可以通过以下方式获取下一页的节点:

    PostRef.orderByChild("count").startAt(100, "-Ldfo731rl").limitToFirst(10);
    

正如 Alex 所评论的,Firebase 实时数据库的分页主题已经在这里进行了很多介绍,因此我建议您查看其他一些文章 questions on the topic .

关于java - 如何在recyclerview firebase中动态更改limitToFirst()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56580012/

相关文章:

java - Content-Disposition 附件不起作用 - 将位打印到屏幕

java - 具有缓冲区偏移量的 glbuffersubdata,不会导致垃圾

android - 从 GeoDataClient.getPlacePhotos() 获取照片时出现 illegalStateException

android - 第二次获取数据将我的 long 变量递增 1,导致无法多次重新加载数据

java - getter 总是在 android 中返回

node.js - 在云函数上创建消息主题

java - Eclipse 无法识别 JVM 1.8

java - 点击android上的随机7位数字

android - 修复 SharedElementTransition 动画显示不佳

javascript - Firebase:暂停/恢复文件上传