如主题所述。我希望能够使用searchview按用户名搜索用户。我已经在recyclerview中显示了所有用户,但是找不到过滤它们的方法。我正在使用Cloud Firestore。可能吗还是我实际上需要第三部分?到目前为止,我找到的所有指南和教程都在firebase数据库上。
适配器代码。
vpd
}
用户列表显示具有recylerview的用户。
public class AllUserAdapter extends FirestoreRecyclerAdapter<AllUsers, AllUserAdapter.AllUsersHolder> {
private OnItemClicklistener mOnItemClicklistener;
public AllUserAdapter(@NonNull FirestoreRecyclerOptions<AllUsers> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull AllUsersHolder holder, int position, @NonNull AllUsers model) {
holder.textViewUsername.setText(String.valueOf(model.getName()));
holder.textViewEmail.setText(model.getEmail());
holder.setAvatar(model.getAvatar());
}
@NonNull
@Override
public AllUsersHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.all_user_list_display, viewGroup, false);
return new AllUsersHolder(view);
}
class AllUsersHolder extends RecyclerView.ViewHolder{
TextView textViewUsername;
TextView textViewEmail;
ImageView imageViewAvatar;
public AllUsersHolder(@NonNull View itemView) {
super(itemView);
textViewUsername = itemView.findViewById(R.id.all_user_username);
textViewEmail = itemView.findViewById(R.id.all_user_userEmail);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && mOnItemClicklistener!= null){
mOnItemClicklistener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
}
public void setAvatar(String avatar){
imageViewAvatar = (ImageView) itemView.findViewById(R.id.all_user_profile_image);
Picasso.get().load(avatar).into(imageViewAvatar);
}
}
public interface OnItemClicklistener {
void onItemClick(DocumentSnapshot snapshot, int position);
}
public void setOnItemClickListener(OnItemClicklistener listener){
mOnItemClicklistener = listener;
}
}
答案 0 :(得分:0)
Firebase 不不支持本机索引编制或在数据库属性中搜索文本字段。此外,下载整个节点以搜索客户端的字段根本不可行。如offical documentation中所指定,要启用对Cloud FIrestore数据库的全文本搜索,您应使用Algolia或Elasticsearch之类的第三方搜索服务。
This 是有关Cloud Firestore的示例。
如果不需要这样做,您应该考虑使用如下查询:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference brandsRef = rootRef.collection("brands");
brandsRef.orderBy("userName").startAt(searchName).endAt(searchName + "\uf8ff")
答案 1 :(得分:0)
使用TextWatcher并相应地更新适配器
etSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
String searchText = etSearch.getText().toString();
arrUpdateList = new ArrayList<>();
for (int i = 0; i < arrYourList.size(); i++) {
if (Pattern.compile(Pattern.quote(searchText), Pattern.CASE_INSENSITIVE).matcher(arrYourList.get(i).title).find() {
arrUpdateList.add(arrYourList.get(i));
} else {
}
}
if (arrUpdateList.size() > 0) {
tvEmptyView.setVisibility(View.GONE);
lvSpecialOffer.setVisibility(View.VISIBLE);
bookCouponAdapter = new BookCouponAdapter(BookCouponListActivity.this, arrUpdateList);
lvSpecialOffer.setAdapter(bookCouponAdapter);
} else if (arrUpdateList.size() <= 0) {
lvSpecialOffer.setVisibility(View.GONE);
tvEmptyView.setVisibility(View.VISIBLE);
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
答案 2 :(得分:0)
我已经尝试过使用你们的解决方案,但是我没有使它起作用。.我想第三部分是使这项工作有效。
不过,谢谢您的回答。干杯