AutoCompleteTextView 自动提示

我们使用控件AutoCompleteTextView 自动提示时,有时需要设置BaseAdapter,设置BaseAdapter时,需要实现Filterable,手动进行筛选。

常用属性
布局只设置了至少输入一个字符显示提示

<AutoCompleteTextView
        android:id="@+id/at"
        android:completionThreshold="1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
 private List<String> allData = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        allData.add("aa");
        allData.add("bb");
        allData.add("cc");
        allData.add("dd");
        allData.add("abc");
        allData.add("bcd");
        AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.at);
        MyAdapter adapter = new MyAdapter();
        textView.setAdapter(adapter);
    }

adapter适配器代码

 class MyAdapter extends BaseAdapter implements Filterable {
        DataFilter filter;
        ArrayList<String> data;

        @Override
        public int getCount() {
            if (data != null && data.size() > 0) {
                return data.size();
            }
            return 0;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            TextView textView = new TextView(MainActivity.this);
            textView.setText(data.get(position));
            return textView;
        }

        @Override
        public Filter getFilter() {
            if (filter == null) {
                filter = new DataFilter();
            }
            return filter;
        }

        private class DataFilter extends Filter {

            @Override
            protected FilterResults performFiltering(CharSequence prefix) {
                //查询结果保存到FilterResults对象里
                FilterResults results = new FilterResults();
                List<String> queryData = new ArrayList<>();
                for (int i = 0; i < allData.size(); i++) {
                    if (allData.get(i).contains(prefix.toString())) {
                        queryData.add(allData.get(i));
                    }
                }
                results.values = queryData;
                results.count = queryData.size();
                return results;
            }

            /**
             * 更新UI
             */
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

                List<String> queryData = (List<String>) results.values;
                if (data == null) {
                    data = new ArrayList<>();
                }
                if (data.size() > 0) {
                    data.clear();
                }

                if (queryData != null && queryData.size() > 0)
                    for (String string : queryData) {
                        data.add(string);
                        notifyDataSetChanged();
                    }
            }

        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值