2013-06-16 15 views
10

Napisałem niestandardowy filtr dla AutoCompleteTextView. To działa dobrze, ale jedna mała rzecz. Wiązanie do funkcji performFiltering ma wartość zerową na pierwszym znaku. Oznacza to, że proces filtrowania rozpoczyna się dopiero po umieszczeniu drugiego znaku w widoku AutoCompleteTextView.Ograniczenie dla funkcji performFiltering zwraca null dla pierwszego znaku

Jest to kod z filtrem:

private Filter nameFilter = new Filter() { 
    public String convertResultToString(Object resultValue) { 
     String fullName = ((User)(resultValue)).facebookName; 
     return fullName; 
    } 

    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     if(constraint != null) { 
      suggestions.clear(); 
      for (User friend : allFriends) { 
       if(friend.facebookName.toLowerCase().contains(constraint.toString().toLowerCase())){ 
        suggestions.add(friend); 
       } 
      } 
      FilterResults filterResults = new FilterResults(); 
      filterResults.values = suggestions; 
      filterResults.count = suggestions.size(); 
      return filterResults; 
     } else { 
      return new FilterResults(); 
     } 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     ArrayList<User> filteredList = (ArrayList<User>) results.values; 
     if(results != null && results.count > 0) { 
      clear(); 
      for (User friend : filteredList) { 
       add(friend); 
      } 
      notifyDataSetChanged(); 
     } 

    } 
}; 

Czy ktoś może mi pomóc jak to naprawić, więc filtr zaczyna filtrowanie pierwszego znaku?

Odpowiedz

23

Ustaw threshold do 1:

autoCompleteTextView.setThreshold(1) 

Określa minimalną liczbę znaków, które użytkownik musi wpisać w pole edycji przed listy rozwijanej jest pokazany. Gdy próg jest mniejszy lub równy 0, stosuje się próg 1.

+0

Wielkie dzięki Sam, rozwiązałem problem! – Rutger

+0

który działa świetnie –

Powiązane problemy