【问题标题】:Android Searchview on Firebase DataFirebase 数据上的 Android Searchview
【发布时间】: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 片段中使用搜索功能

【问题讨论】:

  • 嗨布伦特,我有同样的问题。你找到解决办法了吗?如果是,请在此处更新您的答案。提前谢谢你。

标签: android firebase filter firebase-realtime-database searchview


【解决方案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")

    它会检查是否有任何匹配的名字属于名字孩子。如果有的话,它会显示列出来

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 2015-10-12
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      相关资源
      最近更新 更多