【问题标题】:not able to implement the filter in SearchView. (SearchView+ FirebaseRecyclerAdapter)无法在 SearchView 中实现过滤器。 (SearchView+ FirebaseRecyclerAdapter)
【发布时间】:2017-11-02 10:19:25
【问题描述】:

我正在使用 Firebase-UI 的 FirebaseRecyclerAdapter。我无法在 SearchView 中实现过滤器。

我的数据库:

我的问题:

如何使用 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);
        }
}

【问题讨论】:

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


    【解决方案1】:

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

    Queries, Part 2: Advanced Searches with Firebase, made Plug-and-Play Simple

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

    您的案例的替代解决方案

    您需要更新一行代码。

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

    这仅适用于从头开始匹配。此外,您还可以了解更多关于 startAt()endAt()equalTo()limitToFirst()limitToLast() 的信息,它们将帮助您更好地进行搜索查询,而无需使用除 firebase 之外的任何外部资源。

    我也希望Firebase Realtime Database Rules 没有问题。

    【讨论】:

    • hii @Ashutosh 感谢您的努力,我已经尝试了您的解决方案:查询 Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt(newText+"\ uf8ff");但事情是我的firebase适配器在我搜索时没有显示。和您提供的链接让我检查一下我会尽快回复您。 :)
    • 嗨@RuchaBhatt 我认为你的实现是正确的,问题出在 firebase 上。但有一件事是一直困扰着我。你不认为重新分配 mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);适配器一次又一次是个问题?
    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2016-05-20
    • 2018-12-09
    相关资源
    最近更新 更多