2017-02-28 5 views
4

Ich möchte die Android Searchview-Funktion in einem listview-Fragment implementieren, das mit Daten aus einer Firebase-Datenbank gefüllt wird.Android-Suchansicht auf Firebase-Daten

-Code die Firebase Daten zu erhalten

mPOIAdapter = new FirebaseListAdapter<Poi>(
      getActivity(), 
      Poi.class, 
      R.layout.item_layout_poi, 
      FirebaseDatabase.getInstance().getReference("poi").orderByChild("name")) { 
     @Override 
     protected void populateView(View v, Poi model, int position) { 
      TextView pointsText = (TextView) v.findViewById(R.id.poi_textview); 
      pointsText.setText(model.getName()); 
      TextView pointDescr = (TextView) v.findViewById(R.id.poi_building); 
      pointDescr.setText(model.getDescription()); 
     } 
    }; 

    mPOIListView.setAdapter(mPOIAdapter); 

Suche Code:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 

    inflater.inflate(R.menu.options_menu,menu); 
    MenuItem item = menu.findItem(R.id.search); 
    item.setVisible(true); 
    SearchView searchView = (SearchView) item.getActionView(); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      return false; 
     } 
    }); 
} 

ich Code wie diesen verwenden möchten, um die Listenansicht Elemente zu filtern basierend auf der Eingabe der Benutzer

searchView.setOnQueryTextListener(new OnQueryTextListener() { 

    @Override 
    public boolean onQueryTextSubmit(String s) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String s) { 
     getListAdapter().getFilter().filter(s); 
     return true; 
    } 
}); 

Da der FirebaseListAdapter nicht die gleichen Möglichkeiten wie der ListAdapter bietet, kann ca nicht die getListAdapter().getFilter().filter(s)

verwenden

Gibt es eine alternative Möglichkeit, die Suchfunktion in einem Listview-Fragment mit Firebase Daten

+0

hii brent, i gleiche Problem haben. Hast du irgendeine Lösung gefunden? Wenn ja, bitte aktualisieren Sie Ihre Antwort hier. Vielen Dank im Voraus. –

Antwort

0
bevölkert zu verwenden

Sie in jedem Array müssen nicht nur neue Methode „firebaseUserSearch“ die Kopie erstellen Ihren RecyclerView-Adapter und fügen Sie ihn hinein. Verwenden Sie Ihre Datenbankreferenz, um sie zu filtern.

Meine FB Struktur ist:

BLABLA: 
    Bars: 
     01: 
      BarName: "Best bar" 
     02: 
      BarName: "The Worst bar" 

Und Code ist hier:

.... 

    databaseReference = FirebaseDatabase.getInstance().getReference ("Bars"); 

    ..... 


    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String searchText) { 

      // TODO Auto-generated method stub 

      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String searchText) { 

      searchText = searchView.getQuery().toString(); 

      firebaseUserSearch (searchText); 

      return true; 
     } 
    }); 
    return true; 
} 



private void firebaseUserSearch (final String searchText) { 


    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter <Bar, ViewHolder>(

      Bar.class, 
      R.layout.custom_row, 
      ViewHolder.class, 
     databaseReference.orderByChild("barName").startAt(searchText.toUpperCase()).endAt(searchText + "\uf8ff")) 
    { 
     @Override 
     protected void populateViewHolder(ViewHolder viewHolder, Bar model, final int position) { 

    ....