performFiltering上的约束在第一个字符上返回null

时间:2013-06-16 20:52:06

标签: android filter autocompletetextview

我为AutoCompleteTextView编写了一个自定义Filter。 它工作正常,但一件小事。 performFiltering上的Constraint在第一个字符上为null。这意味着只有在将第二个字符放入AutoCompleteTextView时才会启动过滤过程。

这是过滤器的代码:

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();
        }

    }
};

任何人都可以帮我解决这个问题,所以Filter会对第一个字符开始过滤吗?

1 个答案:

答案 0 :(得分:30)

threshold设置为1:

autoCompleteTextView.setThreshold(1)
  

指定用户必须输入的最小字符数   在显示下拉列表之前编辑框。当阈值小于或等于0时,应用阈值1。