0

My search view is working properly but I am trying to do a search such that all the "visible" search letters should be highlighted. I used the filter interface in my adapter for filtering data.

here is my adapter Class

public class myAdapter extends RecyclerView.Adapter<myAdapter.viewHolder> implements Filterable {

   private List<Model> model;
   // for search filtering
 private ArrayList<Model> modelFull;
  Context context;

    public myAdapter(ArrayList<Model> model, Context context) {
        this.model = model;
        modelFull =new ArrayList<>(model);
        this.context = context;
    }

    @NonNull
    @Override
    public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.template, parent, false);
        return new viewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull viewHolder holder, int position) {
        Model forPosition = model.get(position);
        holder.image.setImageResource(forPosition.getImage());
        holder.intro.setText(forPosition.getIntro());


    }

    @Override
    public int getItemCount() {
        return model.size();
    }




    public class viewHolder extends RecyclerView.ViewHolder {
        TextView intro;
       ImageView image;

        public viewHolder(@NonNull View itemView) {
            super(itemView);

            intro= itemView.findViewById(R.id.introTxt);


            image = itemView.findViewById(R.id.image);

        }
    }

    @Override
    public Filter getFilter() {
        return generalFilter;
    }

    private Filter generalFilter =new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {

            List<Model> filteredModel =new ArrayList<>();
            if(constraint ==null || constraint.length()==0) {
                filteredModel.addAll(modelFull);
            }
            else   {
                String searchQuery= constraint.toString().toLowerCase().trim();

               

                for(blogBigModel item : modelFull){
                    if(item.getBlogIntro().toLowerCase().contains(searchQuery)){

  
                        filteredModel.add(item);
                    }
                }


               

            }
        FilterResults results =new FilterResults();
            results.values = filteredModel;
            return  results;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
        model.clear();
       
        model.addAll((List)results.values);
        notifyDataSetChanged();

        }
    };
}

that's my class / Fragment where i used the above adapter

[what should i add to get the desired highlighted query when i search in the search bar like Whatsapp][1] [1]: https://i.stack.imgur.com/Fdu2r.jpg

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                    switch (item.getItemId()) {

                        case R.id.ic_home_search:enter code here
                            SearchView searchView = (SearchView) item.getActionView();
                            searchView.setQueryHint("Search....");
                            searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);

                            searchView.setBackground(getResources().getDrawable(R.drawable.searchview_bg));

                            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                                @Override
                                public boolean onQueryTextSubmit(String query) {
                                    return false;
                                }

                                @Override
                                public boolean onQueryTextChange(String newText) {
                                    adapter.getFilter().filter(newText);
                                    return false;
                                }
                            });


                    }
                }


                return true;
            
        });

0 Answers0