AutoCompleteTextView的使用

来源:互联网 发布:漫画控不能连接网络 编辑:程序博客网 时间:2024/06/06 03:09

AutoCompleteTextView  autoTextView;

一、简单使用Adapter

String[] gxy_yws = new String[] { "缬沙坦片", "复方利血平片", "复方利血平氨苯蝶啶片", "硝苯地平缓释片", "硝苯地平控释片", "卡托普利片", "尼莫地平片",
            "马来酸依那普利片", "苯磺酸氨氯地平片", "吲达帕胺片", "依那普利片", "心普利片", "心胺利片", "硝苯地平片", "尼群地平片", };
   
// 创建一个ArrayAdapter,封装数组
        ArrayAdapter<String> arr = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_dropdown_item_1line,
                gxy_yws);

        autoTextView.setAdapter(arr);



二、使用自定义的Adapter====Adapter 继承BaseAdapter 并实现Filterable 接口 (HospitalAutoCompleteAdaptermAdapter

1、设置数据 ;

1)autoTextView.setThreshold(1); //设置第一个字符就开始检索


2)mAdapter = new HospitalAutoCompleteAdapter(getActivity());

autoTextView.setAdapter(mAdapter);


3)mAdapter.setDataList(dataBean.getInfor());

mAdapter.notifyDataSetChanged();

4)设置点击事件

注意:获取值的时候的值为  mAdapter.getItem(position)

 autoTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                if (dataBean != null && dataBean.getInfor().size() > 0) {                    HospitalAndDepartmentBean.InforBean pc = mAdapter.getItem(position);                    tvPatientInhospital.setText(pc.getOfficeName());                } else {                    tvPatientInhospital.setText("");                }            }        });

5)Adapter 

/** * 医院adapter */public class HospitalAutoCompleteAdapter extends BaseAdapter implements Filterable {    private Context m_context;    private LayoutInflater m_Inflater = null;    public List<HospitalAndDepartmentBean.InforBean> datas;    private ArrayFilter mFilter;    private ArrayList<HospitalAndDepartmentBean.InforBean> mUnfilteredData;    public HospitalAutoCompleteAdapter(Context context) {        m_context = context;        m_Inflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        if (datas == null || datas.isEmpty()) {            return 0;        }        return datas.size();    }    @Override    public HospitalAndDepartmentBean.InforBean getItem(int position) {        if (position < 0 || position >= datas.size()) {            return null;        }        return datas.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(final int position, View convertView, ViewGroup parent) {        HospitalAutoCompleteAdapter.ViewHolder holder = null;        if (convertView == null) {            holder = new HospitalAutoCompleteAdapter.ViewHolder();            convertView = m_Inflater.inflate(R.layout.item_simple_param, parent, false);            holder.tv_public_item_simple = (TextView) convertView.findViewById(R.id.tv_public_item_simple);            convertView.setTag(holder);        } else {            holder = (HospitalAutoCompleteAdapter.ViewHolder) convertView.getTag();        }        final HospitalAndDepartmentBean.InforBean dataBean = datas.get(position);        holder.tv_public_item_simple.setText(dataBean.getOfficeName());        return convertView;    }    /**     * 设置列表数据     *     * @param list     */    public void setDataList(List<HospitalAndDepartmentBean.InforBean> list) {        datas = new ArrayList<HospitalAndDepartmentBean.InforBean>();        datas.addAll(list);        notifyDataSetChanged();    }    /**     * 添加列表数据     *     * @param list     */    public void addDataList(List<HospitalAndDepartmentBean.InforBean> list) {        if (datas == null) {            setDataList(list);        } else {            datas.addAll(list);            notifyDataSetChanged();        }    }    public List<HospitalAndDepartmentBean.InforBean> getData() {        return datas;    }    @Override    public Filter getFilter() {        if (mFilter == null) {            mFilter = new ArrayFilter();        }        return mFilter;    }    private class ViewHolder {        TextView tv_public_item_simple;    }    private class ArrayFilter extends Filter {        @Override        protected FilterResults performFiltering(CharSequence prefix) {            FilterResults results = new FilterResults();            if (mUnfilteredData == null) {                mUnfilteredData = new ArrayList<HospitalAndDepartmentBean.InforBean>(datas);            }            if (prefix == null || prefix.length() == 0) {                ArrayList<HospitalAndDepartmentBean.InforBean> list = mUnfilteredData;                results.values = list;                results.count = list.size();            } else {                String prefixString = prefix.toString().toLowerCase();                ArrayList<HospitalAndDepartmentBean.InforBean> unfilteredValues = mUnfilteredData;                int count = unfilteredValues.size();                ArrayList<HospitalAndDepartmentBean.InforBean> newValues = new ArrayList<HospitalAndDepartmentBean.InforBean>(count);                for (int i = 0; i < count; i++) {                    HospitalAndDepartmentBean.InforBean pc = unfilteredValues.get(i);                    if (pc != null) {                        if (pc.getOfficeName() != null && pc.getOfficeName().startsWith(prefixString)) {                            newValues.add(pc);                        }//                        else if(pc.getEmail()!=null && pc.getEmail().startsWith(prefixString)){////                            newValues.add(pc);//                        }                    }                }                results.values = newValues;                results.count = newValues.size();            }            return results;        }        @Override        protected void publishResults(CharSequence constraint,                                      FilterResults results) {            //noinspection unchecked            datas = (List<HospitalAndDepartmentBean.InforBean>) results.values;            if (results.count > 0) {                notifyDataSetChanged();            } else {                notifyDataSetInvalidated();            }        }    }}