我目前有两个Android微调器,类别和评级,我想用Firebase中的数据进行过滤搜索。现在我一次只能搜索1个微调器,但我希望搜索过滤器包含2个微调器。
以下是检索评分的代码:
firebase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
shops = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if (ds.child("ratings").getValue().toString().equals(userSelectRatings)) {
shopName = ds.child("shop_name").getValue().toString();
phoneNumber = ds.child("phone_no").getValue().toString();
categoryOfShop = ds.child("category").getValue().toString();
email = ds.child("email").getValue().toString();
shops.add(new Shop(shopName, categoryOfShop, phoneNumber, userSelectRatings, email));
initializeAdapter();
}
}
}
以下是检索商店类别的代码:
firebase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
shops = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
if (ds.child("category").getValue().toString().equals(userSelectCategory)) {
shopName = ds.child("shop_name").getValue().toString();
phoneNumber = ds.child("phone_no").getValue().toString();
ratingsOfShop = ds.child("ratings").getValue().toString();
email = ds.child("email").getValue().toString();
shops.add(new Shop(shopName, userSelectCategory, phoneNumber, ratingsOfShop, email));
initializeAdapter();
如何编辑我的代码,以便我可以按类别和评级筛选搜索,而不是一次只筛选一个?原因是因为两个微调器都有不同的听众,所以我不确定它是如何工作的。我们将非常感谢您的帮助!
答案 0 :(得分:0)
无法发表评论,但我假设您有三组数据:类别,评级和数据。您发布的两个部分填充了类别和评分,我猜你还有另一部分为所有项目填充了适配器?
另一个假设是您以相同的方式填充数据适配器,获取所有更新以便填充DataAdapter。然后你应该有一个Categories.onWhatever -> doFilterData()
Ratings.onWhatever -> doFilterData()
doFilterData()
Get Category
Get Rating
DataAdapater.getFilter().filter(category "~" rating)
类。
{{1}}
然后,过滤器可以解析字符串的类别和评级,并在其认为合适时更新数据列表。因为数据没有改变,所以不需要回到网络来执行过滤。
需要注意的是,您的DataAdapter有两个LIsts,一个完整列表和一个筛选列表。 Firebase onDataChange始终更新完整列表,您的过滤器类始终更新过滤后的列表。你的getView,getItem,get *方法也应该从过滤后的列表中返回。
我在我的某个应用程序中使用了相同的过滤方法,而且我使用了4级过滤而不是2级过滤。