我正在android Studio中开发一个汽车租赁Android应用程序。我正在使用“过滤器”选项,这样用户就可以过滤可用的汽车(例如,他们可以选择只看到有5个座位的柴油汽车,或者他们可以选择只看到全轮驱动的汽车,等等)。我有一个名为FilterCars的活动,例如,用户可以通过4个组件过滤:燃料、牵引、座椅、变速箱。在提交过滤器后,将根据它们的喜好显示汽车。我将这些过滤器传递给Cars活动( cars是在RecyclerView中显示的)和捆绑附加(成功),所以我在Cars.java中将成功用户的过滤器存储在变量"fuelType、tractionType、seatsType、gearboxType“中。
使用这些过滤器,我可以将一个查询传递给回收视图适配器,如下所示:
FirebaseFirestore.getInstance().collection("Cars").whereEqualTo("fuel", fuelType).whereEqualTo("traction", tractionType).whereEqualTo("seats", seatsType).whereEqualTo("gearbox", gearboxType)
效果很好。
我的问题是:我不想强迫用户完成所有的过滤器字段,因此,例如,如果他们只想通过燃料和座位过滤,他们可以这样做。如何生成一个只包含用户选择的过滤器的复合查询?我思考这个问题但我无法解决的一种方法是,例如,如果用户不想通过牵引力过滤,在tractionType中存储类似“(空)”之类的内容,并在复合查询中而不是在tractionType查询"whereEqualTo“中放置返回所有车辆的内容,那么复合查询将只通过选择的过滤器进行过滤。
对怎么做有什么建议吗?还是有更好的方法可以避免将空答案放在复合查询中?
谢谢!
发布于 2021-03-31 13:15:25
以下查询:
FirebaseFirestore.getInstance().collection("Cars")
.whereEqualTo("fuel", fuelType)
.whereEqualTo("traction", tractionType)
.whereEqualTo("seats", seatsType)
.whereEqualTo("gearbox", gearboxType);将过滤您的集合“汽车”的四个属性的价值。
我不想强迫用户完成所有的过滤字段,例如,如果他们只想通过燃料和座位进行过滤
有两种方法可以解决这个问题。以上面的查询为例,您可以删除对".whereEqualTo("traction",tractionType)“和”.whereEqualTo(“变速箱”,gearboxType)“的调用,并得到所需的结果。或者,你可以这样做,因为这在我看来更有意义。
当用户第一次打开应用程序时,只需显示" cars“集合中存在的所有可用汽车:
Query query = FirebaseFirestore.getInstance().collection("Cars")如果有太多的调用,添加限制()调用,或者实现分页。然后简单地添加选择汽车过滤器的可能性。例如,为每个筛选选项添加4个复选框.一旦选择了一个选项,将其添加到查询对象中,如下所示:
query = query.whereEqualTo("fuel", fuelType)如果用户选择所有选项,则查询将类似于第一个选项。
还请记住,Fi还原查询是不可变的。欲了解更多信息,请查阅以下帖子:
如果正在为Android使用Firebase-UI库,请不要忘记在设置新查询后启动/停止侦听。如果您没有使用该库,请不要忘记将更改通知适配器。
https://stackoverflow.com/questions/66888002
复制相似问题