【问题标题】:Android Search View with Firebase RecyclerView not showing data带有 Firebase RecyclerView 的 Android 搜索视图不显示数据
【发布时间】:2018-02-20 20:43:42
【问题描述】:

我可以通过RecyclerView 将数据从 Firebase 检索到 App。但是当我尝试添加搜索视图时它不起作用。

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

   getMenuInflater().inflate(R.menu.menu_search, menu);
    final SearchView searchView =(SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menusearch));
    SearchManager searchManager =(SearchManager) getSystemService(SEARCH_SERVICE);        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName());
    //searchView.setSubmitButtonEnabled(true);

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
       @Override
       public boolean onQueryTextSubmit(String query) {
           return false;
       }

       @Override
       public boolean onQueryTextChange(String newText) {
          //SearchText.setText(newText);
           Query Q = mDatabase.child("Recipees").orderByChild("cusine").startAt(newText).endAt("");
           FirebaseRecyclerAdapter<ImageRetrieve, BlogViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ImageRetrieve, BlogViewHolder>(

                   ImageRetrieve.class,
                   R.layout.recipe_row,
                   BlogViewHolder.class,
                   Q

           ) {
               @Override
               protected void populateViewHolder(BlogViewHolder viewHolder, ImageRetrieve model, int position) {

                   viewHolder.setCusine(model.getCusine());
                   viewHolder.setCatagory(model.getCatagory());
                   viewHolder.setRecipe(model.getRecipe());
                   viewHolder.setUrl(getApplicationContext(), model.getUrl());

               }
           };

           mRecipeList.setAdapter(firebaseRecyclerAdapter);



           return false;
       }


   });
   return true;
   }

【问题讨论】:

  • firebase 查询是否会返回一些给您?
  • 关于无搜索,我可以在回收视图中检索相同的数据
  • 这意味着查询有误:试试这个:mDatabase.child("Recipees").orderByChild("cusine").equalTo(newText);

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


【解决方案1】:

试试这个可能有帮助:

Query Q = mDatabase.child("Recipees").orderByChild("cusine").startAt(newText).endAt(newText+"\uf8ff");

【讨论】:

  • 关于 firebase 最糟糕的事情是在大多数情况下他们使用弹性搜索通过其他 api 进行搜索,我想实现你自己的适配器并获取列表然后过滤它将是你的最佳选择
【解决方案2】:

试试下面的代码,它可能会有所帮助:

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String text) {

            // if searchView is not empty
            if(!text.isEmpty()){
              // call seearch method if user starts typing
                search(text);
            }

            //else
            else{
                // set TextField empty
                search("");
            }

            return true;
        }
    });

// 执行搜索的方法

private void search(String newText)
{

   ArrayList<> searchList = new ArrayList<>();


    // creates a query to initiate the search
   Query Q = mDatabase.child("Recipees")
    .orderByChild("cusine").startAt(newText).endAt(newText + "\uf8ff");


    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot.hasChildren()){

                //clears the arrayList
                searchList.clear();

                for(DataSnapshot snapshot : dataSnapshot.getChildren()){

                    final ImageRetrieve imageRetrieve = 
                     snapshot.getValue(ImageRetrieve.class);

                    //adds the rooms searched to the arrayList
                    searchList.add(imageRetrieve);

                }

            //NB: recyclerView is the view object in your activity that populates data

                FirebaseRecyclerAdapter firebaseRecyclerAdapter =
                        new FirebaseRecyclerAdapter(yourActivity.this,searchList);
                recyclerView.setAdapter(firebaseRecyclerAdapter);

                firebaseRecyclerAdapter.notifyDataSetChanged();

            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            // display message if error occurs

        }
    });

}

【讨论】:

    【解决方案3】:

    所以这意味着查询有错误。 试试这个:-->

    mDatabase.child("Recipees").orderByChild("cusine").equalTo(n‌​ewText);
    

    【讨论】:

    • 还是没有运气!!
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 2018-10-17
    • 2015-01-06
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多