Reputation: 173
I implemented a search view, that searches from recycler view & update recycler accordingly. When It doesn't matches any item I am showing another layout "No Record" and set recycler view visibility to GONE. Suppose recycler view contains an item with title "judge" and when I type first two letters "ju", it updates recycler view with judge on top.
Now the problem is:
Search View method
@Override
public boolean onQueryTextChange(String query) {
newsListAdapter.getFilter().filter(query);
if (newsListAdapter.getItemCount() > 0) {
listRecyclerView.setVisibility(View.VISIBLE);
noRecord.setVisibility(View.GONE);
} else {
listRecyclerView.setVisibility(View.GONE);
noRecord.setVisibility(View.VISIBLE);
}
return false;
}
Filter Method of adapter
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
filteredNewsList = newsList;
} else {
List<News.ArticlesBean> filteredList = new ArrayList<>();
for (News.ArticlesBean row : newsList) {
if (row.getTitle().toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(row);
}
}
filteredNewsList = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = filteredNewsList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
filteredNewsList = (ArrayList<News.ArticlesBean>) filterResults.values;
notifyDataSetChanged();
}
};
}
Upvotes: 1
Views: 747
Reputation: 173
This worked
@Override
public boolean onQueryTextChange(String query) {
Filter.FilterListener listener = new Filter.FilterListener() {
@Override
public void onFilterComplete(int count) {
if (newsListAdapter.getItemCount() <=0) {
listRecyclerView.setVisibility(View.GONE);
noRecord.setVisibility(View.VISIBLE);
} else {
listRecyclerView.setVisibility(View.VISIBLE);
noRecord.setVisibility(View.GONE);
}
}
};
newsListAdapter.getFilter().filter(query, listener);
return false;
}
Upvotes: 1