13

AutoCompleteTextView のカスタム フィルターを作成しました。正常に動作しますが、小さなことが 1 つあります。performFiltering の Constraint は最初の文字で null です。つまり、フィルタリング プロセスは、2 番目の文字が 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();
        }

    }
};

フィルターが最初の文字でフィルタリングを開始するように、誰でもこれを修正する方法を教えてもらえますか?

4

1 に答える 1

36

thresholdを 1 に設定します。

autoCompleteTextView.setThreshold(1)

ドロップダウン リストが表示される前に、ユーザーが編集ボックスに入力する必要がある最小文字数を指定します。しきい値が 0 以下の場合、しきい値 1 が適用されます。

于 2013-06-16T21:02:32.347 に答える