您的位置:首页 > 其它

AutoCompleteTextView 控件实现提示文本以及模糊查询

2016-11-18 16:21 1501 查看
AutoCompleteTextView要实现模糊查询 ,重写ArrayAdapter和 系统里面自带的一样的代码,源代码是 匹配开头,设置  android:completionThreshold"=1 就是 第一个字符提示,默认是2个,将valueText.startsWith(prefixString)改为valueText.contains(prefixString)就能实现模糊查询。另外 AutoCompleteTextView属性列举一下:

 setCompletionHint(CharSequence)设置下拉菜单中的提示标题
android:completionHintView 设置下拉菜单中提示标题的视图
android:completionThresholdsetThreshold(int)设置用户至少输入几个字符才会显示提示
adnroid:dropDownAnchorsetDropDownAnchor(int)设置下拉菜单的定位“锚点”组件,如果没有指定该属性,将使用该TextView本身作为定位”锚点“组件
adnroid:dropDownHeightsetDropDownHeight(int)设置下拉菜单的高度
android:dropDownHorizontalOffest 设置下拉菜单与文本框之间的水平偏移,下拉菜单默认与文本框左对齐
adnroid:dropDownVerticalOffest 设置下拉菜单与文本框之间的垂直偏移,下拉菜单默认紧跟文本框
android:dropDownWidthsetDropDownWidth(int)设置下拉菜单的宽度
android:popupBackgroundsetDropDownBackgroundResource(int)设置下拉菜单的背景
另外可自定义adapter, 实现Filterable 接口 ,重写

  @Override
 public Filter getFilter() {

        if (mFilter == null) {

            mFilter = new ArrayFilter();

        }

        return mFilter;

    }

//建立 过滤器

private class ArrayFilter extends Filter {

        @Override

        protected FilterResults performFiltering(CharSequence prefix) {

            // 过滤后利用FilterResults将过滤结果返回

            FilterResults results = new FilterResults();

            if (mUnfilteredData == null) {

                mUnfilteredData = new ArrayList<String>(names);

            }

            if (prefix == null || prefix.length() == 0) {

                ArrayList<String> list = mUnfilteredData;

                results.values = list; // list是上面的过滤结果

                results.count = list.size();// 结果数量

            } else {

                String prefixString = prefix.toString().toLowerCase();

                ArrayList<String> unfilteredValues = mUnfilteredData;

                int count = unfilteredValues.size();

                ArrayList<String> newValues = new ArrayList<String>(count);

                for (int i = 0; i < count; i++) {

                    String value = mUnfilteredData.get(i);

                    String valueText = value.toLowerCase();

            

                    if (valueText.contains(prefixString)) { //实现模糊查询    

                        //    valueText.contains(prefixString) 源码 ,匹配开头

                        newValues.add(value);

                    }

                    results.values = newValues;

                    results.count = newValues.size();

                }

            }

            return results;

        }

        // 用于更新自动完成列表

        @SuppressWarnings("unchecked")

        @Override

        protected void publishResults(CharSequence constraint,

                FilterResults results) {

            names = (List<String>) results.values;

            if (results.count > 0 && results
8d3e
!= null) {

                notifyDataSetChanged();

            } else {// 无过滤结果,关闭列表

                notifyDataSetInvalidated();

            }

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐