AutoCompleteTextView结合自定义过滤器

AutoCompleteTextView结合自定义过滤器
实现数据过滤,记录一下,方便以后使用。

自定义BaseAdapter 并实现Filterable接口

public class ListAdapter extends BaseAdapter implements Filterable {

    private List<User> list;

    private Context context;

    private PersonFilter filter;

    public ListAdapter(List<User> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        User p = list.get(position);
        View view = LayoutInflater.from(context).inflate(R.layout.view, null);
        TextView firstname = (TextView)view.findViewById(R.id.phone);
        TextView lastname = (TextView)view.findViewById(R.id.time);
        firstname.setText(p.getPhone());
        lastname.setText(p.getTime());
        return view;
    }

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

    private class PersonFilter extends Filter {

        private List<User> users;

        public PersonFilter(List<User> list) {
            this.users = list;
        }

        //这里是子线程来进行工作的
        @Override
        protected Filter.FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            if (constraint == null || constraint.length() == 0) {
                results.values = users;
                results.count = users.size();
            } else {
                List<User> mList = new ArrayList<>();
                for (User p: users) {
                    if (p.getPhone().startsWith(constraint.toString())
                            || p.getTime().startsWith(constraint.toString())) {
                        mList.add(p);
                    }
                }
                results.values = mList;
                results.count = mList.size();
            }
            return results;
        }

        @Override
        protected void publishResults(CharSequence constraint,
                                      FilterResults results) {
            list = (List<User>)results.values;
            notifyDataSetChanged();
        }

    }
}

user数据类

public class User{
    
    private String phone;
    private String time;

    public String getPhone(){
        return phone;
    }

    public String getTime(){
        return time;
    }

    public void setPhone(String phone){
        this.phone = phone;
    }

    public void setTime(String time){
        this.time = time;
    }
}

给AutoCompleteTextView设置,完工。

AutoCompleteTextView auto = (AutoCompleteTextView) findViewById(R.id.auto_complete);
        List<User> users = new ArrayList<>();
        User user = new User();
        User user1 = new User();
        User user2 = new User();
        user.setPhone("18624915319");
        user.setTime("12:00");
        user1.setPhone("13928940420");
        user1.setTime("8:00");
        user2.setPhone("199883234204");
        user2.setTime("10:08");
        users.add(user1);
        users.add(user);
        users.add(user2);
        auto.setAdapter(new ListAdapter(users, this));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,925评论 6 342
  • 学习是一个深入的过程,不停的反复的研究,不能浮于表面,要深入原理。 之前我们了解到springcloud zuul...
    二月_春风阅读 48,369评论 6 22
  • 文/木家小北 目录 上一章 尊敬的蓝田领导: 您好。 基于我今天作为一名人民教师,却在学校如此神圣的地方和我老婆求...
    木家小北阅读 269评论 0 0
  • 最近给自己画了要求,每天一微博每天一文章。今天的微博段子来自将去成都读研的哥们,作文题目也找他要了来。虽然大半的题...
    框框之上阅读 257评论 2 1