Firebase 数据上的 Android Searchview
Posted
技术标签:
【中文标题】Firebase 数据上的 Android Searchview【英文标题】:Android Searchview on Firebase Data 【发布时间】:2017-07-19 03:58:45 【问题描述】:我想在填充了来自 Firebase 数据库的数据的列表视图片段中实现 android Searchview 功能。
获取 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 片段中使用搜索功能
【问题讨论】:
嗨布伦特,我有同样的问题。你找到解决办法了吗?如果是,请在此处更新您的答案。提前谢谢你。 【参考方案1】:您不需要在任何数组中创建新方法“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)
....
【讨论】:
【参考方案2】:FirebaseDatabase.getInstance().getReference("poi").orderByChild("name").equalTo("anyName"))
试试这个 orderByChild("name").equalTo("nameString")
它会检查是否有任何匹配的名字属于名字孩子。如果有的话,它会显示列出来
【讨论】:
以上是关于Firebase 数据上的 Android Searchview的主要内容,如果未能解决你的问题,请参考以下文章
我无法检索应在 Android 上的意图数据内的 Firebase 动态链接
用于登录Android Studio的实时firebase数据库上的空指针异常[重复]
将上传的数据上传到android studio上的firebase实时数据库时应用程序崩溃
我想从firebase实时数据库中显示recyclerview android上的数据..但我无法将动态数据加载到适配器数组中