无法在SearchView中实现过滤器。(SearchView + FirebaseRecyclerAdapter)

5
我可以帮您翻译成中文。这段内容是关于编程的,讲述了使用Firebase-UI的FirebaseRecyclerAdapter时无法在SearchView中实现筛选器的问题。 我的数据库:

enter image description here

我的问题:

如何使用FirebaseRecyclerAdapter按字符在FirebaseDatabase中搜索?
(我想通过用户名搜索)

我的代码:我使用了这种方法进行搜索,但我的代码有什么问题吗?

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

        @Override
        public boolean onQueryTextChange(String newText) {

            Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt("~");

            FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<User, SearchFeedFragment.AllRegisterUserViewHolder>(
                    User.class, R.layout.row_search_all_users, SearchFeedFragment.AllRegisterUserViewHolder.class, Q) {
                @Override
                protected void populateViewHolder( SearchFeedFragment.AllRegisterUserViewHolder viewHolder,User model, int position) {


                    viewHolder.setUserName(model.getUsername());
                    viewHolder.setUserProfilePic(Common.stringToBitMap(model.getProfilepicurl()));

                }
            };
            mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);
            return false;
        }
    });


public static class AllRegisterUserViewHolder extends RecyclerView.ViewHolder {

        View mView;

        ImageView mImgProfileImage = (ImageView) itemView.findViewById(R.id.iv_searchProfilePic);
        TextView mTxtProfileName = (TextView) itemView.findViewById(R.id.txt_searchProfileName);

        public AllRegisterUserViewHolder(View itemView) {
            super(itemView);
            itemView = mView;
        }

        public void setUserName(String username) {
            mTxtProfileName.setText(username);
        }

        public void setUserProfilePic(Bitmap image) {
            mImgProfileImage.setImageBitmap(image);
        }
}
1个回答

1

使用Firebase实时数据库实现完美搜索

查询,第2部分:使用Firebase进行高级搜索,使插件和播放变得简单

阅读本文,您将了解Firebase实时数据库搜索的原因和方式以及如何实现搜索查询。

您的情况的另一种解决方案

您需要更新一行代码。

Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt(newText+"\uf8ff");

这只适用于从开头匹配。此外,您可以了解有关startAt(), endAt(), equalTo(), limitToFirst()limitToLast()的更多信息,它们将帮助您在不使用firebase之外的任何外部资源的情况下改进搜索查询。

同时,我希望Firebase实时数据库规则没有问题。


嗨@Ashutosh,感谢您的努力。我已经尝试了您的解决方案:Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt(newText+"\uf8ff"); 但问题是,当我搜索时,我的Firebase适配器没有显示出来。您提供的链接让我检查一下,我会尽快回复您的 :) - Rucha Bhatt Joshi
1
嗨@RuchaBhatt,我假设你的实现是正确的,问题出在Firebase上。但有一件事情一直困扰着我。你不觉得反复重新分配mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter)适配器是一个问题吗? - Ashutosh Barthwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接