2017-02-28 76 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) { 

    ....