2017-02-28 77 views
4

我想在填充了Firebase數據庫中的數據的listview片段中實現Android Searchview功能。Firebase數據上的Android Searchview

代碼來獲取火力地堡數據

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

搜索查看代碼:

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

我想用這樣的代碼基於用戶的輸入來過濾列表視圖項

searchView.setOnQueryTextListener(new OnQueryTextListener() { 

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

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

因爲FirebaseListAdapter與ListAdapter不具有相同的可能性,所以i ca不要使用getListAdapter().getFilter().filter(s)

有沒有辦法使用的搜索功能填充火力地堡數據列表視圖片段的另一種方式

+0

HII布倫特,我有同樣的問題。你有沒有找到解決辦法?如果是的話,請在這裏更新你的答案。先謝謝你。 –

回答

0

你不以任何陣列只需要創造新的方法「firebaseUserSearch」 副本你的RecyclerView適配器並粘貼在裏面。使用你的databaseReference來過濾它。

我的FB結構爲:

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

和代碼是在這裏:

.... 

    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) { 

    ....