在Firestore中使用分页时,如何获取正确的newIndex?

时间:2020-07-22 12:45:06

标签: android firebase kotlin google-cloud-firestore

我已经根据文档实施了分页。我在我的项目中使用以下代码:

override fun onEvent(querySnapshot: QuerySnapshot?, e: FirebaseFirestoreException?) {
    if (e != null) return

    for (documentChange in querySnapshot!!.documentChanges) {
        value = when (documentChange.type) {
            Type.ADDED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
            Type.MODIFIED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
            Type.REMOVED -> {
                Log.d("TAG", "oldIndex:" + documentChange.oldIndex + "/" + "newIndex:" + documentChange.newIndex)
            }
        }
    }
}

当我使用此查询获取前4个用户时:

var query: Query = db.collection("users")
    .orderBy("name", DESCENDING)
    .limit(4)

我得到:

A/oldIndex:-1/newIndex:0
B/oldIndex:-1/newIndex:1
C/oldIndex:-1/newIndex:2
D/oldIndex:-1/newIndex:3

这是正确的,因为所有用户都是新用户,并且oldIndex等于-1。 newIndex从0递增到3,这也是正确的。但是,当我使用此查询时:

var secondQuery: Query = db.collection("users")
    .orderBy("name", DESCENDING)
    .startAfter(lastVisibleUser)
    .limit(4)

要获得接下来的4位用户,我得到:

E/oldIndex:-1/newIndex:0
F/oldIndex:-1/newIndex:1
G/oldIndex:-1/newIndex:2
H/oldIndex:-1/newIndex:3

用户名正确的地方,oldIndex还是正确的,但是newIndex应该从0开始,不是从4开始。我如何第二次获得正确的newIndex?

1 个答案:

答案 0 :(得分:2)

将为快照获取的索引与同一侦听器的先前快照进行比较。由于您触发了一个新查询,因此它是一个新的侦听器,因此所有索引都基于一个空的先前状态。

要查看索引的作用,将永久侦听器附加到查询中,然后在第一个查询中更改一个用户的名称,以使其在结果中的位置改变。您将看到所有用户的先前索引和新索引将根据先前快照和新状态进行更新。