Custom AutoCompleteTextView behavior

前端 未结 4 975
再見小時候
再見小時候 2020-12-19 02:45

Out of the box, the AutoCompleteTextView widget does not seem to be able to match the input string in the middle of a list value - the matches are always made a

4条回答
  •  情话喂你
    2020-12-19 03:00

    public class AutoCompleteAdapter  extends ArrayAdapter implements Filterable {
        private List  listObjects;
        List suggestions = new ArrayList<>();
        private Context context;
        public AutoCompleteAdapter(Context context, List listObjects) {
            super(context, R.layout.list_item_simple, listObjects);
            this.listObjects = new ArrayList<>(listObjects);
            this.context = context;
        }
        private Filter mFilter = new Filter(){
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults filterResults = new FilterResults();
                if(constraint != null) {
                suggestions.clear();
                    for(T object : listObjects){  
                        if(object.toString().toLowerCase().contains(constraint.toString().toLowerCase())){                        suggestions.add(object);
                    }
                }
    
                filterResults.values = suggestions;
                filterResults.count = suggestions.size();
            }
            return filterResults;
        }
    
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            if(results == null){
                return;
            }
            List filteredList = (List) results.values;
            if(results.count > 0) {
                clear();
                for (T filteredObject : filteredList) {
                    add(filteredObject);
                }
                notifyDataSetChanged();
            }
        }
    };
    @Override
    public Filter getFilter() {
        return mFilter;
    }
    private static class ViewHolder {
        TextView title;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Object listObject = getItem(position);
        final ViewHolder viewHolder; // view lookup cache stored in tag
        if (convertView == null) {
            viewHolder = new ViewHolder();
            LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.list_item_simple, parent, false);
            viewHolder.title = (TextView) convertView.findViewById(R.id.title);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.title.setText(listObject.toString());
        return convertView;
    }
    

    }

提交回复
热议问题