我想在一个列表视图片段中实现Android Searchview函数,其中填充了来自Firebase数据库的数据。
获取Firebase数据的代码
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;
}
});
}
我想使用这样的代码来根据用户的输入过滤Listview条目
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相同的可能性,所以我不能使用getListAdapter().getFilter().filter(s)
在填充了Firebase数据的Listview片段中使用搜索功能有什么替代方法吗
发布于 2018-02-05 04:00:01
您不需要在任何数组中,只需创建新方法"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) {
....
https://stackoverflow.com/questions/42504376
复制相似问题