提问人:Rucha Bhatt Joshi 提问时间:6/1/2017 最后编辑:piet.tRucha Bhatt Joshi 更新时间:6/22/2017 访问量:888
无法在 SearchView 中实现筛选器。(SearchView+ FirebaseRecyclerAdapter)
not able to implement the filter in SearchView. (SearchView+ FirebaseRecyclerAdapter)
问:
我正在使用 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);
}
}
答:
1赞
Ashutosh Barthwal
6/13/2017
#1
使用 Firebase Realtime Database 实现完美搜索
查询,第 2 部分:使用 Firebase 进行高级搜索,让即插即用变得简单
阅读本文,您将了解 Firebase 实时数据库搜索的原因和方式,以及如何实现搜索查询。
适合您案例的替代解决方案
您需要更新一行代码。
Query Q = mAllUsersDatabaseRef.child("User").orderByChild("username").startAt(newText).endAt(newText+"\uf8ff");
这仅适用于从头开始匹配。此外,您还可以了解有关 startAt()、endAt()、equalTo()、limitToFirst() 和 limitToLast() 的更多信息,它们将帮助您在不使用 firebase 以外的任何外部资源的情况下更好地进行搜索查询。
我也希望Firebase实时数据库规则没有问题。
评论
0赞
Rucha Bhatt Joshi
6/13/2017
嗨,@Ashutosh感谢您的努力,我已经尝试了您的解决方案:查询 Q = mAllUsersDatabaseRef.child(“User”).orderByChild(“username”).startAt(newText).endAt(newText+“\uf8ff”);但问题是我的 Firebase 适配器在我搜索时没有显示。和您提供的链接让我检查一下,我会尽快回复您。:)
1赞
Ashutosh Barthwal
6/13/2017
嗨@RuchaBhatt我认为您的实现是正确的,问题出在 firebase 上。但有一件事是一直困扰我.你不觉得重新分配 mRecyclerViewSearch.setAdapter(firebaseRecyclerAdapter);适配器一次又一次地是一个问题吗?
评论