这里我在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 个节点”。
实现分页的两个广泛选项是:
使用不断增长的页面大小。因此,当您显示第一页时,您使用
limitToFirst(10)
,然后对于第二页,您使用limitToFirst(20)
,依此类推。PostRef.orderByChild("count").limitToFirst(20);
这非常简单,但确实会导致您读取比后续页面所需的更多数据。通常这不是一个大问题,只要用户不向下浏览太多页面即可。
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/