gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:33:41 27 4
gpt4 key购买 nike

我正在使用 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);
}
}

最佳答案

使用 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 没有问题.

关于firebase - 无法在 SearchView 中实现过滤器。 (SearchView+ FirebaseRecyclerAdapter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com