How to highlight filtered text in RecyclerView when using SearchView widget

后端 未结 4 1440
执念已碎
执念已碎 2020-12-30 16:44

How to highlight search text result in RecyclerView. I found some posts regarding Spannable TextView, but not sure where to implement in my case. Appreciate you can look an

4条回答
  •  不知归路
    2020-12-30 17:18

    Use inside on Bind view holder in Adapter class

    String title1 = Itemlist.get(position).getN_stall_name().toLowerCase(Locale.getDefault());
                holder.title.setText(Itemlist.get(position).getN_stall_name());
    
    if (title1.contains(searchText)) {
                    int startPos = title1.indexOf(searchText);
                    int endPos = startPos + searchText.length();
                    Spannable spanString = Spannable.Factory.getInstance().newSpannable(holder.title.getText());
                    spanString.setSpan(new ForegroundColorSpan(Color.RED), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    holder.title.setText(spanString);
                }
    

    And now create public method in Adapter class

     public void updateList(List list, String searchText) {
                Itemlist = new ArrayList<>();
                Itemlist.addAll(list);
                this.searchText = searchText;
                notifyDataSetChanged();
            }
    

    Search view listener use inside Activity where you use search view

    SearchView searchview=findviewbyid(R.id.searchview);
        searchview.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }
                    @Override
                    public boolean onQueryTextChange(String newText) {
                        newText = newText.toLowerCase();
                        ArrayList newList = new ArrayList<>();
                        for (GetShop userInfo : items) {
                            String type = userInfo.getN_stall_name().toLowerCase();
                            if (type.contains(newText)) {
                                newList.add(userInfo);
                            }
                        }
                        disp_adapter.updateList(newList, newText);
                        return true;
                    }
                });
    

提交回复
热议问题