【发布时间】:2018-08-29 10:13:19
【问题描述】:
我试图从我的材料搜索对话框中搜索 Firebase 数据库。我成功地做到了,但问题是我只能通过标题进行搜索(我的数据库也包含标题和描述),尽管我尝试了很多对我没有用的东西。
在某个时候,我成功地为搜索描述创建了另一个搜索功能,但随后它使标题的搜索结果出现异常。
我附上下面的代码可以,请看一下,如果有什么我可以做的搜索标题和描述,请告诉我。
声明和代码(我已经跳过了活动代码中不需要的部分)
materialSearchBar = homeView.findViewById(R.id.searchBar);
materialSearchBar.setHint("Search Ad");
loadSuggest();
materialSearchBar.setLastSuggestions(suggestList);
materialSearchBar.setCardViewElevation(10);
materialSearchBar.addTextChangeListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
List<String> sugest = new ArrayList<String>();
for (String search : suggestList) {
if (search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
sugest.add(search);
}
materialSearchBar.setLastSuggestions(sugest);
}
@Override
public void afterTextChanged(Editable editable) {
}
});
materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
@Override
public void onSearchStateChanged(boolean enabled) {
if (!enabled)
mallUsers.setAdapter(firebaseRecyclerAdapter);
}
@Override
public void onSearchConfirmed(CharSequence text) {
startSearch(text);
}
@Override
public void onButtonClicked(int buttonCode) {
}
});
// start search and load suggestions methods
private void startSearch(CharSequence text) {
String searchText = text.toString();
Query query1 = mDatabase1.orderByChild("title").startAt(searchText).endAt(searchText + "\uf8ff");
Query query2 = mDatabase1.orderByChild("description").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Ad> firebaseRecyclerOptions2 = new FirebaseRecyclerOptions
.Builder<Ad>()
.setQuery(query1, Ad.class)
.build();
searchAdapter = new FirebaseRecyclerAdapter<Ad, UsersViewHolder1>(firebaseRecyclerOptions2) {
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder1 holder, int position, @NonNull Ad ad1) {
holder.setTitle(ad1.getTitle());
holder.setPrice(ad1.getPrice());
holder.setCategory(ad1.getCategory());
holder.setImage(ad1.getImage(), getContext());
holder.setTime(ad1.getTime());
String user_id = getRef(position).getKey();
final String kk = user_id.toString();
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent mew = new Intent(getActivity(), ExpandActivity.class);
mew.putExtra("user_id", kk);
startActivity(mew);
}
});
}
@NonNull
@Override
public UsersViewHolder1 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout
.user_ad_layout, parent,
false);
return new UsersViewHolder1(view1);
}
};
searchAdapter.startListening();
mallUsers.setAdapter(searchAdapter);
}
private void loadSuggest() {
mDatabase1.orderByKey().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot postdataSnapshot : dataSnapshot.getChildren()) {
Ad item = postdataSnapshot.getValue(Ad.class);
if (item != null) {
suggestList.add(item.getTitle());
suggestList.add(item.getDescription());
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
【问题讨论】:
标签: android firebase firebase-realtime-database android-recyclerview