How to change color, or highlight the search word when using SearchView in filtered RecyclerView?
MainActivity
public class Chapter1 extends AppCompatActivity implements SearchView.OnQueryTextListener { MyRecAdapter myRecAdapter; RecyclerView recyclerView; List<Post> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(layout.chapter1_main); recyclerView = (RecyclerView) findViewById(R.id.myrec); createdata(); myRecAdapter = new MyRecAdapter(list, Chapter1.this); recyclerView.setLayoutManager(new LinearLayoutManager(Chapter1.this)); recyclerView.setAdapter(myRecAdapter); } void createdata() { list = new ArrayList<>(); String topic_1_1 = getResources().getString(string.topic_1_1); String text_1_1 = getString(string.text_1_1); String topic_1_2 = getResources().getString(string.topic_1_2); String topic_1_3 = getResources().getString(string.topic_1_3); String text_1_3 = getString(string.text_1_3); list.add(new Post(topic_1_1, text_1_1)); list.add(new Post(topic_1_2, "")); list.add(new Post(topic_1_3, text_1_3)); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); getMenuInflater().inflate(R.menu.main, menu); MenuItem item = menu.findItem(R.id.menu_search); SearchView searchView = (SearchView) MenuItemCompat.getActionView(item); searchView.setOnQueryTextListener(this); return super.onCreateOptionsMenu(menu); } @Override public boolean onQueryTextChange(String newText) { final List<Post> filteredModelList = filter(list, newText); if (filteredModelList.size() > 0) { myRecAdapter.setFilter(filteredModelList); return true; } else { Toast.makeText(Chapter1.this, "Not Found", Toast.LENGTH_SHORT).show(); return false; } } private List<Post> filter(List<Post> models, String query ) { query = query.toLowerCase(); final List<Post> filteredModelList = new ArrayList<>(); for (Post model : models) { final String text = model.getPostTitle().toLowerCase(); final String text_sub = model.getPostSubTitle().toLowerCase(); if (text.contains(query)) { filteredModelList.add(model); } else { if (text_sub.contains(query)) { filteredModelList.add(model); } } } createdata(); myRecAdapter = new MyRecAdapter(filteredModelList, Chapter1.this); recyclerView.setLayoutManager(new LinearLayoutManager(Chapter1.this)); recyclerView.setAdapter(myRecAdapter); myRecAdapter.notifyDataSetChanged(); return filteredModelList; } } Adapter
public class MyRecAdapter extends RecyclerView.Adapter<MyRecAdapter.VH> { public List<Post> parkingList; public Context context; ArrayList<Post> mCountryModel; public MyRecAdapter(List<Post> parkingList, Context context) { this.parkingList = parkingList; this.context = context; } @Override public MyRecAdapter.VH onCreateViewHolder(ViewGroup parent, int viewType) { return new MyRecAdapter.VH(LayoutInflater.from(parent.getContext()).inflate(R.layout.mycardview, parent, false)); } @Override public void onBindViewHolder(MyRecAdapter.VH holder, int position) { holder.t1.setText(Html.fromHtml(parkingList.get(position).getPostTitle())); holder.t2.setText(Html.fromHtml(parkingList.get(position).getPostSubTitle())); } @Override public int getItemCount() { return parkingList.size(); } public class VH extends RecyclerView.ViewHolder { TextView t1, t2; public VH(View view) { super(view); t1 = (TextView) view.findViewById(R.id.list_title); t2 = (TextView) view.findViewById(R.id.list_desc); } } public void setFilter(List<Post> countryModels) { mCountryModel = new ArrayList<>(); mCountryModel.addAll(countryModels); notifyDataSetChanged(); } } Post
public class Post { private String postTitle; private String postSubTitle; public String getPostTitle() { return postTitle; } public void setPostTitle(String postTitle) { this.postTitle = postTitle; } public String getPostSubTitle() { return postSubTitle; } public void setPostSubTitle (String postSubTitle) { this.postSubTitle = postSubTitle; } public Post(String postTitle, String postSubTitle) { this.postTitle = postTitle; this.postSubTitle = postSubTitle; }