android的autocompletetextview适配器 自定义

来源:互联网 发布:ios仿京东商城源码 编辑:程序博客网 时间:2024/06/05 11:55

上一篇 文章 讲的是 autocompletetextview 使用 arrayAdapter 适配器 添加 并刷新数据,

只能使用 系统提供的样式和 简单的数据类型(基本数据类型),如果 其他情况就需要 自定义adapter。

自定义 autocompletetextview 的适配器需要 实现 implementsFilterable筛选器。

适配器 的属性

private Context context;    private ArrayList<Yao> list;    private LayoutInflater inflater;    //    private ArrayFilter mFilter;    private ArrayList<Yao> mList;

重写的 方法

@Override    public Filter getFilter() {        if (mFilter == null) {            mFilter = new ArrayFilter();        }        return mFilter;    }    private class ViewHolder {        TextView tv;        public ViewHolder(View v) {            this.tv = (TextView) v.findViewById(R.id.yaochose_item_tv);        }    }    //过滤器    private class ArrayFilter extends Filter {        //匹配 列表        @Override        protected FilterResults performFiltering(CharSequence prefix) {            FilterResults results = new FilterResults();            if (mList == null) {                mList = new ArrayList<Yao>(list);            }            if (prefix == null || prefix.length() == 0) {                ArrayList<Yao> list = mList;                results.values = list;                results.count = list.size();            } else {                String prefixString = prefix.toString().toLowerCase();                ArrayList<Yao> unfilteredValues = mList;                int count = unfilteredValues.size();                ArrayList<Yao> newValues = new ArrayList<Yao>(count);                for (int i = 0; i < count; i++) {                    Yao pc = unfilteredValues.get(i);                    if (pc != null) {                        //匹配值                        if (pc.getPharmacyCNName() != null                                && pc.getPharmacyCNName().startsWith(prefixString)) {                            newValues.add(pc);                        }                    }                }                results.values = newValues;                results.count = newValues.size();            }            return results;        }        @Override        protected void publishResults(CharSequence constraint,                                      FilterResults results) {            mList = (ArrayList<Yao>) results.values;            if (results.count > 0) {                notifyDataSetChanged();            } else {                notifyDataSetInvalidated();            }        }        //展示 结果        @Override        public CharSequence convertResultToString(Object resultValue) {            Yao yao = (Yao) resultValue;            return yao.getPharmacyCNName();        }    }


0 0
原创粉丝点击