我试图在一项活动中实现搜索功能,以便搜索片段中设置的recyclerView。但是,当我在SearchView中更改文本时,来自recyclerView的所有元素都消失了。这是我第一次使用搜索功能,因此不知道现在该怎么做。
不知道我是否应该提及,但我使用的是Firebase Firestore。 我还应该提到我的onCreateOptionsMenu位于Fragment中,而onOptionsItemSelected()位于MainActivity中。
这是我的适配器。 event_list_full是此处的event_list的副本。
@Override
public Filter getFilter() {
return eventListFilter;
}
private Filter eventListFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
List<EventPost> filteredList = new ArrayList<>();
if( charSequence == null || charSequence.length()==0){
filteredList.addAll(event_list_full);
} else {
String filterPattern = charSequence.toString().toLowerCase().trim();
for(EventPost item : event_list_full){
if(item.getDesc().toLowerCase().contains(filterPattern)){
filteredList.add(item);
}
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
event_list.clear();
event_list.addAll((List) filterResults.values);
notifyDataSetChanged();
}
};
这是HomeFragment.java代码。我也有setHasOptionsMenu(true);在onCreateView()中。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main_menu, menu);
MenuItem searchItem = menu.findItem(R.id.action_search_button);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
eventRecyclerAdapter.getFilter().filter(s);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
return false;
}
});
}