首页 > 代码库 > 自定义autoCompleteTextView实现自己的匹配规则。
自定义autoCompleteTextView实现自己的匹配规则。
用过autoCompleteTextView(后面简称auto)的同学都知道,它默认是从字符串的头部开始匹配的。
或者中间有空格的也能从空格开始匹配后面的字符串。乍一看还以为是auto的匹配规则问题,
其实是Adapter的问题(本来使用的是ArrayAdapter)。
要怎么样自定义匹配规则呢?!
1.自定义adapter继承自baseAdapter
2.实现Filterable接口,发现里面有一个必须实现的方法getFilter()。
3.了解到getFilter()方法必须返回一个Filter类型的对象。
4,.在自定义adapter中创建继承Filter的内部类。
5,.在内部类中实现对数据的匹配规则。
具体看代码。
public class myAdapter<T> extends BaseAdapter implements Filterable { private List<T> mOriginalValues; private List<T> mObject; private final Object mLock = new Object(); private int mResouce; private MyFilter myFilter = null; private LayoutInflater inflater; public myAdapter(Context context,int TextViewResouceId,List<T> objects) { init(context,TextViewResouceId,objects); } private void init(Context context, int textViewResouceId, List<T> objects) { inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mObject = objects; mResouce = textViewResouceId; myFilter = new MyFilter(); } @Override public int getCount() { return mObject.size(); } @Override public T getItem(int position) { return mObject.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { return getViewFromResouce(position,convertView,parent,mResouce); } private View getViewFromResouce(int position, View convertView, ViewGroup parent, int mResouce2) { if(convertView == null) { convertView = inflater.inflate(mResouce2, parent,false); } TextView tv = (TextView)convertView; T item = getItem(position); if(item instanceof CharSequence) { tv.setText((CharSequence)item); } else { tv.setText(item.toString()); } return tv; } //返回过滤器 @Override public Filter getFilter() { return myFilter; } //自定义过滤器 private class MyFilter extends Filter { //得到过滤结果 @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if(mOriginalValues == null) { synchronized (mLock) { mOriginalValues = new ArrayList<T>(mObject); } } int count = mOriginalValues.size(); ArrayList<T> values = new ArrayList<T>(); for(int i = 0;i < count;i++) { T value = http://www.mamicode.com/mOriginalValues.get(i);>之后创建auto控件使用此adapter进行填充就可以了。
自定义autoCompleteTextView实现自己的匹配规则。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。