AutoCompleteTextView autoTextView;
一、简单使用Adapter
String[] gxy_yws = new String[] { "缬沙坦片", "复方利血平片", "复方利血平氨苯蝶啶片", "硝苯地平缓释片", "硝苯地平控释片", "卡托普利片", "尼莫地平片",
"马来酸依那普利片", "苯磺酸氨氯地平片", "吲达帕胺片", "依那普利片", "心普利片", "心胺利片", "硝苯地平片", "尼群地平片", };
// 创建一个ArrayAdapter,封装数组
ArrayAdapter
gxy_yws);
autoTextView.setAdapter(arr);
二、使用自定义的Adapter====Adapter 继承BaseAdapter 并实现Filterable 接口 (HospitalAutoCompleteAdapter mAdapter)
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 Listdatas; private ArrayFilter mFilter; private ArrayList 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 list) { datas = new ArrayList (); datas.addAll(list); notifyDataSetChanged(); } /** * 添加列表数据 * * @param list */ public void addDataList(List list) { if (datas == null) { setDataList(list); } else { datas.addAll(list); notifyDataSetChanged(); } } public List 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 (datas); } if (prefix == null || prefix.length() == 0) { ArrayList list = mUnfilteredData; results.values = list; results.count = list.size(); } else { String prefixString = prefix.toString().toLowerCase(); ArrayList unfilteredValues = mUnfilteredData; int count = unfilteredValues.size(); ArrayList newValues = new ArrayList (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 ) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } }