【问题标题】:How to change limitToFirst() dynamically in recyclerview firebase?如何在 recyclerview firebase 中动态更改 limitToFirst()?
【发布时间】:2019-06-13 22:43:47
【问题描述】:

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

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

在 tihs firstTenPost 中是 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;


            }
        });

所以有没有可能?如果是,请解释一下

【问题讨论】:

  • 你想要实现什么,一个分页系统?
  • 是的,@AlexMamo 你是对的
  • 这是一个很常见的话题。请参阅stackoverflow.com/search?q=firebase+pagination
  • 你说“分页系统”?它应该是这样的,但我不知道这个话题和逻辑

标签: java android firebase firebase-realtime-database


【解决方案1】:

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

实现分页的两个主要选项是:

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

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

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

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

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

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

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

正如 Alex 评论的那样,使用 Firebase 实时数据库进行分页的话题已经在这里讨论了很多,所以我建议您查看其他一些 questions on the topic

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    相关资源
    最近更新 更多