我刚刚完成了一些接近您正在寻找的事情,我不确定这是最优雅的解决方案,但我会提出一些想法,如果您认为我的想法会有所帮助,我绝对可以提供一些示例。
首先,当我扩展基本 FirebaseAdapter 时,我添加了一个名为 mFullList 的新过滤器,因为 FirebaseAdapter 的 mItems 将用于显示列表,所以我不想在不必要时继续返回网络。然后,我重写子类中的所有方法,以使用 Firebase 回调中的值更新 mFullList,对它们进行排序、过滤,然后使用新列表调用 super.X()。
Quickly:
public reset(List)
mFullList = List
Collections.sort(mFullList, Comparator)
getFilter().filter(filterString)
filterString 是适配器内的一个字段,并在调用 getFilter().filter() 期间更新。在执行过滤器期间,我循环遍历 mFullList 并进行比较:
mFullList.get(pos).getName().toLowerCase().contains(filterString.toLowerCase);
完成筛选后,您将获得一个新列表,该列表将传递到 FilterResults 对象中的 Filter.publishResults。 publishResults 调用类中执行更新和通知的方法。
filterCompleted(List)
getItems().clear
getItems().addAll
notify
本质上,我不希望 FirebaseAdapter 停止获取完整的项目列表,我只是希望用户请求过滤该完整列表并适当处理他们的请求。另外,我没有看到基于用户输入额外字符而添加的网络请求的意义。
使用这种方法,您只需使用:
adapter.getFilter().filter("something")
根据您更新的字段过滤列表,以及
adapter.getFilter().filter("")
重置完整列表(只要您的 PerformFilter() 正确处理了它。这样,来自 FireBase 的新更新将根据用户选择进行过滤,并且当用户输入新值时,不需要创建新的 Firebase网络请求。