2016-03-29 5 views
0

Ich habe derzeit zwei Android-Spinner, Kategorie und Bewertungen, die ich eine Filtersuche mit Daten von Firebase machen würde. Im Moment kann ich nur mit 1 Spinner gleichzeitig suchen, aber ich möchte, dass die Filtersuche 2 Spinner beinhaltet.Filter Suche in 2 Android Spinner

Unten finden Sie den Code die Bewertungen abzurufen:

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(); 
       } 
      } 
     } 

Unten ist der Code der Kategorie der Geschäfte abzurufen:

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(); 

Wie kann ich meinen Code so bearbeiten, dass ich Suche filtern nach Kategorie und Bewertungen statt nur einer nach dem anderen? Der Grund ist, weil beide Spinner unterschiedliche Zuhörer haben, also bin ich mir nicht sicher, wie es wirklich funktioniert. Ihre Hilfe wird geschätzt!

Antwort

0

Kann nicht kommentieren, aber ich arbeite unter der Annahme, dass Sie drei Datensätze haben: Kategorien, Bewertungen und Daten. Die beiden Abschnitte, die Sie gepostet haben, füllen die Kategorien und Bewertungen. Ich nehme an, Sie haben einen anderen Abschnitt, der den Adapter für alle Elemente füllt.

Eine weitere Annahme besteht darin, dass Sie Ihren Datenadapter auf die gleiche Weise auffüllen und alle Aktualisierungen erhalten, damit Ihr DataAdapter aufgefüllt wird. Sie sollten dann eine DataAdapter.Filter Klasse haben.

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

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

Sie Filter kann dann die Zeichenfolge für die Kategorie und Bewertung analysiert und die Datenliste aktualisieren, da es für richtig hält. Es ist nicht sehr notwendig, nur zum Filtern zurück zum Netzwerk zu gehen, da sich die Daten nicht geändert haben.

Der Nachteil ist, dass Ihr DataAdapter zwei LIsts, eine vollständige Liste und eine gefilterte Liste hat. Sie Firebase onDataChange aktualisiert immer die vollständige Liste und Ihre Filterklasse aktualisiert immer die gefilterte Liste. Ihre Methoden getView, getItem, get * sollten auch aus der gefilterten Liste zurückkehren.

Ich habe die gleiche Methode der Filterung in einer meiner Anwendungen verwendet und ich verwende 4 Filterstufen statt zwei.