Android Studio中如何让Firebase Database的bestresult子节点固定置顶
你的Firebase数据库结构参考:
实现方案
Firebase Realtime Database 默认按子节点key的字典序升序排列,要让bestresult节点始终固定在Test 1节点的子项最顶部,可选用以下三种方案:
- 方案1:新增排序权重字段(最稳定,推荐)
给Test 1下的所有子节点新增sortWeight数值字段控制排序:- 给
bestresult节点设置sortWeight: 0 - 后续新增所有子节点时,统一将
sortWeight设为大于0的值,可直接使用当前毫秒级时间戳,也可使用从1开始递增的整数
查询时指定按权重字段排序即可,示例代码如下:
该方案无需修改原有节点的key,后续调整排序规则也更灵活。const testRef = firebase.database().ref("Test 1"); testRef.orderByChild("sortWeight").on("value", (snapshot) => { snapshot.forEach((childNode) => { // 遍历结果中bestresult固定排在第一位 console.log(childNode.key, childNode.val()); }) }) - 给
- 方案2:调整节点key的字典序
利用Firebase默认的字典序排序规则,修改key让bestresult永远排在最前:- 将原有
bestresult的key修改为0_bestresult(ASCII码中数字的优先级高于字母,以0开头的key会排在所有字母开头的key之前) - 后续新增子节点时不要使用
0_作为key前缀即可,Firebase默认push生成的节点key本身就不会以0开头,无需额外处理
- 将原有
- 方案3:前端手动拼接(适合不想修改后端数据的场景)
不修改后端数据结构,前端查询时分开拉取后手动拼接展示顺序:- 先单独拉取
Test 1/bestresult节点的数据 - 再拉取
Test 1下排除bestresult之外的所有子节点数据 - 前端渲染列表时,把
bestresult放在列表第一位,再追加其他节点的内容
- 先单独拉取
内容的提问来源于stack exchange,提问作者APTEMKA
相关产品推荐
相关产品推荐


