2017-09-03 3 views
1

J'ai utilisé RecyclerView et personnalisé Adaptateur dans mon application ... adaptateur être mis en œuvre Filtrable pour la recherche. Comment mettre en haute lumière le texte de recherche?Comment haute lumière texte de recherche dans l'adaptateur RecyclerView

Ce mon code pour filtrables adaptateur personnalisé:

private Filter filterResult = new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults filterResults = new FilterResults(); 
      ArrayList<Moment> tempList = new ArrayList<>(); 
      if (MOMENT_FILTER != null) { 
       if (TextUtils.isEmpty(constraint)) { 
        tempList = (ArrayList<Moment>) MOMENT_FILTER; 
       } else { 
        int length = MOMENT_LIST.size(); 
        int i = 0; 
        while (i < length) { 
         Moment item = MOMENT_FILTER.get(i); 
         if (item.getMoment().contains(constraint)) 
          tempList.add(item); 
         i++; 
        } 
       } 
      } 
      filterResults.values = tempList; 
      filterResults.count = tempList.size(); 
      return filterResults; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) { 
      MOMENT_LIST = (ArrayList<Moment>) results.values; 
      if (results.count > 0) { 
       notifyDataSetChanged(); 
      } 
     } 
    }; 

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

Et ce mon code d'activité pour le changement de texte (EditText):

EDT_SEARCH.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       adapter.getFilter().filter(s); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
}); 

résultat est OK avec Sahil répondre!

Répondre

2

ont une référence de l'searchText dans votre adaptateur puis dans votre OnBindViewHolder vous pouvez faire comme

String text = list.get(position).getText(); // Your getter Method 
String htmlText = text.replace(searchText,"<font color='#c5c5c5'>"+searchText+"</font>"); 
// Only searchText would be displayed in a different color. 
holder.textView.setText(Html.fromHtml(htmlText); 
+0

merci, mais je ne change pas Moment (modèle de base de données), car utilisé dans toute méthode! –

+0

Ajouter un autre paramètre ne devrait pas affecter votre autre modèle. comme il n'est pas nécessaire de modifier le code de votre autre méthode –

+0

@ghasemdeh J'ai mis à jour ma réponse. c'est adapté en fonction de vos besoins. s'il vous plaît vérifier –