android 输入框自动匹配-AutoCompleteTextView
16lz
2021-01-23
android 输入框自动匹配-AutoCompleteTextView
封装自动适配的adapter可以监听,并且可以监听自动匹配输入框的输入事件。package com;import java.util.List;import android.app.Activity;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;/** * @ClassName: AutoCompleteTextViewUtil * @author:hlu * @Date:2013-4-17 * @version V1.0.0 * @Description: AutoCompleteTextView 实现的自动匹配的实现 */public class AutoCompleteTextViewUtil {private AutoCompleteTextView mACTV ;private ArrayAdapter<String> mAdapter ;private ChangeAdapterDataListener mListener ;private List<String> mListObjects= null ;private boolean flagMListObjects = false ;//是否执行查询,当输入框的字符长度大于2时,才会查询,查询了一次之后不会再查询。private boolean flagQuery = false ;public AutoCompleteTextViewUtil(AutoCompleteTextView actv){this.mACTV = actv ;mACTV.addTextChangedListener(watcher) ;mACTV.setOnFocusChangeListener(focusListener) ;mACTV.setOnItemClickListener(itemClickListener) ;mACTV.setOnClickListener(onClickL) ;}public void setAdapter(Activity activity,int resource,List<String> objects){this.mListObjects = objects ;flagMListObjects = true ;flagQuery = false ;mAdapter = new ArrayAdapter<String>(activity,android.R.layout.simple_dropdown_item_1line, mListObjects);mACTV.setAdapter(mAdapter) ;}public void setAdapter(Activity activity,List<String> objects){this.setAdapter(activity, android.R.layout.simple_dropdown_item_1line, objects);}public void setChangeAdapterDataListener(ChangeAdapterDataListener l){this.mListener = l ;}private void setDataList(String text){List<String> list = mListener.getDataList(text) ;if(list != null && list.size() > 0){mListObjects.addAll(list) ;}}private TextWatcher watcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { String enteredText = s.toString() ; if(!TextUtils.isEmpty(enteredText) && enteredText.trim().length() > 0){ //查询新匹配值 if(!flagQuery){ if(flagMListObjects){ //更新List的数据。 setDataList(enteredText.trim()); } mAdapter.notifyDataSetChanged() ; } flagQuery = true ; }else{ flagQuery = false ; } } @Override public void afterTextChanged(Editable s) { }} ;public interface ChangeAdapterDataListener{List<String> getDataList(String text) ;void checkInputTextExist(String text) ;}private View.OnFocusChangeListener focusListener = new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { mACTV.setFocusable(hasFocus) ; if(!hasFocus){ mListener.checkInputTextExist(mACTV.getText().toString().trim()) ; } } }; private OnItemClickListener itemClickListener = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {mListener.checkInputTextExist(mACTV.getText().toString().trim()) ;} }; private OnClickListener onClickL = new OnClickListener() {@Overridepublic void onClick(View v) {mACTV.setFocusableInTouchMode(true) ;mACTV.requestFocus();}};}
使用方法:AutoCompleteTextViewUtil actvUtil = new AutoCompleteTextViewUtil(purchaseOrderSite) ;List<String> data = new ArrayList<String>() ;actvUtil.setAdapter(this, data) ;actvUtil.setChangeAdapterDataListener(new ChangeAdapterDataListener() { @Override public List<String> getDataList() { List<String> data = new ArrayList<String>() ;data.add("qaz");data.add("qaza");data.add("qazab");data.add("qazabd");return data; }});效果图:
注意:AutoCompleteTextView.setOnItemSelectedListener(), 没有效果
更多相关文章
- Android 仿微信TabHost使用方法详解
- Android下拉列表使用方法
- Android中NDK的使用方法
- Android TextView各种使用方法
- Android SVG矢量资源的使用方法
- Android Selector和Shape的使用方法
- Android之系统自带的文字外观设置及实际显示效果图 android:text
- 【Android 开发】:UI控件之显示图片控件 ImageView 的使用方法
- Android AlertDialog的基本使用方法