I'm using SearchView widget in my app and it works fine but I'm trying to highlight the text color of the search results and can't seem to do it.
i.e: RecyclerView item has the following text "Hey there" When a user searches for "Hey" then the color of this keyword should change.
Here's my filter code from the adapter:
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String query = constraint != null ? constraint.toString() : null;
// ----
if (query != null && !query.isEmpty()) {
ArrayList<TextTypingObject> newFilteredTextTypingObjectArrayList = new ArrayList<>();
for (TextTypingObject textTypingObject : mTextTypingObjectList) {
if (textTypingObject.getTextTyping().toLowerCase(Locale.getDefault()).contains(query.toLowerCase(Locale.getDefault()))) {
newFilteredTextTypingObjectArrayList.add(textTypingObject);
}
}
// ----
mTextTypingObjectFilteredList = newFilteredTextTypingObjectArrayList;
} else {
mTextTypingObjectFilteredList = mTextTypingObjectList;
}
// ----
FilterResults filterResults = new FilterResults();
filterResults.values = mTextTypingObjectFilteredList;
filterResults.count = mTextTypingObjectFilteredList.size();
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults filterResults) {
/*if (filterResults.count == 0) {
// There is no "notifyDataSetInvalidated()" method in RecyclerView.Adapter
} else {*/
mTextTypingObjectFilteredList = (ArrayList<TextTypingObject>) filterResults.values;
// ----
notifyDataSetChanged();
/*}*/
}
};
}
SearchView from the fragment:
if (mSearchView != null) {
mSearchView.setQuery(null, true);
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Filter filter = mTextTypingCustomAdapter.getFilter();
if (filter != null) {
filter.filter(s);
// ----
mSearchView.clearFocus();
// ----
return true;
}
return false;
}
@Override
public boolean onQueryTextChange(String s) {
Filter filter = mTextTypingCustomAdapter.getFilter();
if (filter != null) {
filter.filter(s);
return true;
}
return false;
}
});
mSearchView.setVisibility(View.VISIBLE);
mSearchView.clearFocus();
}