AutoCompleteTextView自定义适配器
来源:互联网 发布:三国演义武力排行知乎 编辑:程序博客网 时间:2024/05/22 06:16
在项目中碰到了一次用声母码检索信息的功能,在网上找了半天都是根据ArrayAdapter来写的用自定义的适配器很少。
<AutoCompleteTextView android:id="@+id/actv_1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="3dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginTop="3dp" android:background="@drawable/edittext_select" android:editable="true" android:hint="请输入" android:paddingLeft="10dp" android:textColor="@color/blue2" android:textColorHint="@color/grey2" android:gravity="top" android:textSize="18sp" > <requestFocus /> </AutoCompleteTextView>
写一个AutoCompleteTextView
这些属性就不一一介绍了;
在主程序中声明控件;
private AutoCompleteTextView ac_1;
在onCreate方法中初始化;
ac_1=(AutoCompleteTextView) findViewById(R.id.actv_1);
新建一个适配器类;(我用的是内部类)
class PhoneAdapter extends BaseAdapter implements Filterable { private ArrayFilter mFilter; private ArrayList<String> mList; private Context context; private ArrayList<String> mUnfilteredData; public PhoneAdapter(ArrayList<String> acList, Context context) { this.mList = acList; this.context = context; } @Override public int getCount() { return mList==null ? 0:mList.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; ViewHolder holder; if(convertView==null){ view = View.inflate(context, R.layout.item_info_dict, null); holder = new ViewHolder();// holder.tv_input_code = (TextView) view.findViewById(R.id.tv_input_code); holder.tv_item_name = (TextView) view.findViewById(R.id.tv_item_name); view.setTag(holder); }else{ view = convertView; holder = (ViewHolder) view.getTag(); }// HashMap<String, String> pc = mList.get(position); String pc=mList.get(position);// holder.tv_input_code.setText("code:"+pc.get("input_code"));// holder.tv_item_name.setText("item_name:"+pc.get("item_name")); holder.tv_item_name.setText(pc); return view; } class ViewHolder{ public TextView tv_input_code; public TextView tv_item_name; } @Override public android.widget.Filter getFilter() { if (mFilter == null) { mFilter = new ArrayFilter(); } return mFilter; } private class ArrayFilter extends android.widget.Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); if (mUnfilteredData == null) { mUnfilteredData = new ArrayList<String> (mList); } if (prefix == null || prefix.length() == 0) {// ArrayList<HashMap<String,String>> list = (ArrayList<HashMap<String, String>>) mUnfilteredData; ArrayList<String> list = (ArrayList<String>) mUnfilteredData; results.values = list; results.count = list.size(); } else { String prefixString = prefix.toString().toUpperCase(); ArrayList<String> unfilteredValues = mUnfilteredData; int count = unfilteredValues.size();// ArrayList<HashMap<String,String>> newValues = new ArrayList<HashMap<String,String>> (count); ArrayList<String> newValues = new ArrayList<String> (count); for (int i = 0; i < count; i++) {// HashMap<String, String> pc = unfilteredValues.get(i); String pc = unfilteredValues.get(i); if (pc != null) { if(pc!=null && pc.startsWith(prefixString)){// newValues.add(pc); String [] strings=pc.split("&", -1); newValues.add(strings[1]); }/*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 mList = (ArrayList<String>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } }
简单说一下我需要的是输入的字符动态的选出所有选项,类似百度输入的功能。但是输入的字符跟选项的字符是不一样的。
我的数据是一个ArrayList中放入的是HashMap
PhoneAdapter mAdapter = new PhoneAdapter(list, this); ac_1.setAdapter(mAdapter); ac_1.setThreshold(1); //设置输入一个字符 提示,默认为2
setThreshold(1)这个参数1就是你输入几个字符能提示内容。默认是2个;
给适配器添加一个布局文件这个文件比较简单里边只放了一个TextView
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@color/white" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv_item_name" android:layout_width="wrap_content" android:singleLine="true" android:layout_marginLeft="3dp" android:layout_height="30dp" android:gravity="center" android:textSize="16sp" android:text="item_name" /></LinearLayout>
0 0
- AutoCompleteTextView结合自定义适配器
- AutoCompleteTextView自定义适配器
- android开发 AutoCompleteTextView自定义适配器
- android的autocompletetextview适配器 自定义
- Android 开发 AutoCompleteTextView结合自定义的适配器,查询数据库
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- 自定义AutoCompleteTextView
- android AutoCompleteTextView 自定义BaseAdapter
- android AutoCompleteTextView 自定义BaseAdapter
- 自定义AutoCompleteTextView(续)
- android AutoCompleteTextView 自定义BaseAdapter
- AutoCompleteTextView自定义item布局
- android AutoCompleteTextView自定义Adapter
- android AutoCompleteTextView 自定义BaseAdapter
- 是否加锁同步备忘
- oracle sql语句定时执行
- php闭包的作用
- 如何使用Arrays.copyOf()对数组扩容,使用数组实现栈
- MySQL数据库存储价格金额使用的数据类型
- AutoCompleteTextView自定义适配器
- mysql 5.5 任意用户不加密码均能登录解决方法
- pci_init_capabilities 中的pci_ea_init初始化
- 某线程池代码分析 <一>
- 像考试时前面的10几道单选题的实现
- Mysql too many connections
- 《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
- 多线程爬斗图网
- 准备研究GraphQL