我们如何在Android的Firebase实时数据库中对RecyclerView进行分页?

时间:2018-08-24 05:14:40

标签: android firebase firebase-realtime-database android-recyclerview

我正在制作一个示例android应用程序,它借助RecyclerView显示了Firebase数据库中存在的所有数据。它按我的预期工作。问题是是否随着时间的流逝在数据库中添加更多项目。它仍然会获取所有数据并显示在recyclerView中。肯定会很慢(由于互联网和设备性能下降),并且需要一些时间才能在recyclerView上显示数据。

我听说过一种解决方法,可以将它们做成小块,并在用户进一步滚动时加载另一个。此过程称为分页。 但是,如果使用Firebase数据库,则没有直接的方法可以在recyclerView中对数据进行分页。我也在互联网上搜索了此问题,但没有一个起作用。

有人知道如何在recyclerView中对Firebase数据库数据进行分页吗?

Pagination Can Be Understood By This Sample Video

1 个答案:

答案 0 :(得分:1)

为此,您需要定义两种类型的列表。一个用于主要列表,其中包含所有元素,第二个具有极限数据。

private Query getQuery(String query) {
    Query query;

    if (recentLastItem == null) // recent last item is the any type of object which you have stored in the firebase
        query = FirebaseDatabase.getInstance().getReference()
                .child(your saved data location)
                .orderByKey()
                .limitToLast(no of elements per time you want);
             // this if call when you try first time to get the items from firebase 
    else
        query = FirebaseDatabase.getInstance().getReference()
                .child(your save data location)
                .orderByKey()
                .startAt(recentLastItem)
                .limitToFirst(no of items);
             // this else part run when you try to get next no of items
    return query;
}

获取此查询对象,并在其上调用值Listner。每当用户到达设备的最终屏幕时,还需要调用getQuery()方法。

调用recyclerView.setAdapter(adapter)设置recentLastItem = yourListName.get(yourListName.size() -1)后,不要忘记更新列表中最后一个元素的值