2017-05-08 1 views
0

Ich habe einen Kundenfilter in meinen Adapter geschrieben, damit ein Benutzer nach dem Namen eines Kunden suchen kann. Ich folgte den Antworten auf this question, insbesondere die Antwort mit 35 Up-Stimmen, wie die ausgewählte Antwort die ursprüngliche Liste ändert und Fehler verursacht. Die Filterung funktioniert ordnungsgemäß. Wenn Sie jedoch nach der Suche nach einem Kundennamen die Rücktaste drücken, werden die Ergebnisse nicht aktualisiert. Hier ist meine Filtermethode, danke für jede Hilfe vorher.Filter im benutzerdefinierten Adapter funktioniert nicht wie erwartet nach dem Drücken der Rücktaste

Antwort

0

Warum erstellen Sie nicht Ihren benutzerdefinierten Suchmechanismus, um die Ergebnisse in Ihrer Aktivität oder Fragment anstelle von Adapter zu filtern.

Wenn Sie einen EditText verwenden, fügen Sie Ihrem Bearbeitungstext "TextWatcher" hinzu. wie der unten angegebenen Link:

How to use the TextWatcher class in Android?

Und wenn Sie Suchen dann einfach hinzufügen „OnqueryTextChangeListener“ zu Ihrem serchview verwenden. wie der Link Iven unter:

how to get the events of searchview in android

Und einfach einen Mechanismus für die Filtration nach Ihren Wünschen wie der Beispielcode hinzufügen unten angegeben:

@Override 
     public boolean onQueryTextChange(String s) { 

      textlength = s.length(); 

      arr_sort.clear(); 


      for (int i = 0; i < tunesList.size(); i++) { 


       String heading = (String) tunesList.get(i). 
         getTuneName(); 
       String[] words = heading.split("\\s+"); 

       for (String item : words) { 

        Log.e("Words" , item); 
        if (s.length() <= (int) item.length()) { 

         if (s.equalsIgnoreCase((String) item.subSequence(0, s.length()))) 


         { 
          RowItemMain cObj = tunesList.get(i); 

          if(arr_sort.contains(cObj)) 
          { 

          }else{ 
           arr_sort.add(cObj); 
          } 



         } 
        } 
       } 


      } 




      try 
      { 


       AdapterMain ivAdp = new AdapterMain(MainActivity.this, arr_sort); 
       lvSounds.setAdapter(ivAdp); 

      } catch (Exception e) { 


       e.printStackTrace(); 
      } 


      return true; 
     } 
Verwandte Themen