我想要的是使用addListenerForSingleValueEvent()
加载初始列表一次,加载时显示进度条,加载列表时隐藏进度条,开始使用addChildEventListener()
监听子项更改。
我需要结合使用不同加载方法的原因是:
1)加载addListenerForSingleValueEvent()
并没有为我提供区分哪些项目正在更新的方法。保存上一个列表并遍历所有项目并找到每个项目的匹配项可能很昂贵,因为列表最多可以增加到20k项目。
2)使用addChildEventListener()
加载效果很好但是没有办法知道列表是否预先有项目,如果是这样,当初始列表加载完成时,因此无法显示进度条。此外还有其他几个小原因。
所以我的问题是实现目标的最佳途径是什么?使用这两种方法的问题是加载两次的相同列表。有办法解决这个问题吗?
答案 0 :(得分:0)
Firebase会重复删除侦听器。如果同一位置/查询有多个侦听器,则只传输一次数据。
但如果您不信任该系统,您还可以使用限制查询来最小化重叠:
ref.limitToLast(1).addListenerForSingleValueEvent(...