如何在RecyclerView Firebase中动态更改limitToFirst()?

时间:2019-06-13 12:00:35

标签: java android firebase firebase-realtime-database

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

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

在这种情况下,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;


            }
        });

那么有可能吗?如果可以,请解释

1 个答案:

答案 0 :(得分:0)

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

您必须实现分页的两个主要选择是:

  1. 使用不断增长的页面大小。因此,当您显示第一页时,limitToFirst(10),然后在第二页中,您使用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