2016-03-29 126 views
0

我目前有兩個android spinners,Category和Ratings,我想用Firebase的數據做一個過濾搜索。現在我只能一次搜索1個微調,但我希望過濾器搜索包含2個微調。過濾器搜索在2 Android的Spinners

下面是檢索評級代碼:

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

無法評論,但我正在假設您有三組數據:類別,評分和數據。你發佈的兩個部分填充類別和評級,我猜你有另一個部分填充所有項目的適配器?

另一個假設是您以同樣的方式填充您的數據適配器,獲取所有更新以便填充您的DataAdapter。你應該有一個DataAdapter.Filter班。

Categories.onWhatever -> doFilterData() 
Ratings.onWhatever -> doFilterData() 

doFilterData() 
    Get Category 
    Get Rating 
    DataAdapater.getFilter().filter(category "~" rating) 

您可以過濾然後解析字符串的類別和評級,並更新數據列表,因爲它認爲合適。因爲數據沒有改變,所以沒有太多需要回到網絡來執行過濾。

需要注意的是,DataAdapter有兩個LIsts,一個完整列表和一個過濾列表。 Firebase onDataChange始終更新完整列表,並且您的過濾器類始終會更新過濾列表。你的getView,getItem,get *方法也應該從過濾列表中返回。

我在我的一個應用程序中使用了相同的過濾方法,我使用4級過濾而不是2級過濾。