android中联系人搜索框

在开发中经常用到获取联系人和搜索框,今天总结一下。

代码很多借鉴于:http://blog.csdn.net/wyzxk888/article/details/8800407
在些基础上做了修改,代码做了适量封装,能够直接适用于项目中。

运行效果图:

这里写图片描述这里写图片描述这里写图片描述


代码目录结构:
![这里写图片描述](https://img-blog.csdn.net/20151130230330020

1、在Activity中做调用,得到联系人,对EditText设置监听。

public class MainActivity extends Activity implements TextWatcher {
    private ListAdapter adapter;
    private ArrayList<Person> list;
    private EditText searchbox;
    private ListView listview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        searchbox = (EditText) findViewById(R.id.searchbox);
        listview = (ListView) findViewById(R.id.listview);
        list = new ArrayList<Person>();
        // Person p1 = new Person("于小刚", "13525568711");
        // Person p2 = new Person("张三", "13500001234");
        // Person p3 = new Person("小张", "13800001234");
        // Person p4 = new Person("李四", "13600001111");
        // Person p5 = new Person("abc", "17900001112");
        // Person p6 = new Person("abcd", "17900001113");
        // Person p7 = new Person("小王", "17900001114");
        // list.add(p1);
        // list.add(p2);
        // list.add(p3);
        // list.add(p4);
        // list.add(p5);
        // list.add(p6);
        // list.add(p7);
        //adapter = new ListAdapter(list, this);

        PhoneUtils.getNumber(this);
        //得到联系人;
        adapter = new ListAdapter(PhoneUtils.list, this);
        //设置给adapter;
        listview.setAdapter(adapter);
        //给EditText设置监听;
        searchbox.addTextChangedListener(this);
    }

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int before,
            int arg3) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // TODO Auto-generated method stub
        adapter.getFilter().filter(s); // 当数据改变时,调用过滤器;
    }
}

2、在adapter设置数据,并且得到EditText的监听,改变listview;

public class ListAdapter extends BaseAdapter implements Filterable {  

    private List<Person> list;  

    private Context context;  

    private PersonFilter filter;  

    public ListAdapter(List<Person> 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) {  
        if (convertView == null) {  
            convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);  
        }  
        Person p = list.get(position);  
        TextView name = (TextView)convertView.findViewById(R.id.name);  

        TextView number = (TextView)convertView.findViewById(R.id.number);  

        name.setText(p.name);  
        number.setText(p.number + "");  
        return convertView;  
    }  

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

    private class PersonFilter extends  android.widget.Filter {  

        private List<Person> original;  

        public PersonFilter(List<Person> list) {  
            this.original = list;  
        }  

        @Override  
        protected FilterResults performFiltering(CharSequence constraint) {  
            FilterResults results = new FilterResults();  
            if (constraint == null || constraint.length() == 0) {  
                results.values = original;  
                results.count = original.size();  
            } else {  
                List<Person> mList = new ArrayList<Person>();  
                for (Person p: original) {  
                    if (p.name.toUpperCase().startsWith(constraint.toString().toUpperCase())   
                        || new String(p.number + "").toUpperCase().startsWith(constraint.toString().toUpperCase())) {  
                        mList.add(p);  
                    }  
                }  
                results.values = mList;  
                results.count = mList.size();  
            }  
            return results;  
        }  

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

    }


}  

3、bean类,比较简单。

public class Person {  
    public String name;  
    public String number;  

    public Person(String firtname, String number) {  
        this.name = firtname;  
        this.number =number; 
    }

}  

4、获取联系人的工具类:


public class PhoneUtils {
    // 获得手机上的联系人,并保存入集合;
    public static List<Person> list = new ArrayList<Person>();

    public static String getNumber(Context context) {
        Cursor cursor = context.getContentResolver().query(
                CommonDataKinds.Phone.CONTENT_URI, null, null, null,
                "sort_key asc");
        String phoneNumber;
        String phoneName;
        while (cursor.moveToNext()) {
            phoneNumber = cursor.getString(cursor
                    .getColumnIndex(CommonDataKinds.Phone.NUMBER));
            phoneName = cursor.getString(cursor
                    .getColumnIndex(CommonDataKinds.Phone.DISPLAY_NAME));
            Person phoneInfo = new Person(phoneName, phoneNumber);
            list.add(phoneInfo);
            Log.i("GetPhoneNumber", phoneName + "------" + phoneNumber);
        }
        cursor.close();
        return null;
    }
}

这样就实现了显示联系人并且带有搜索框的功能;
代码下载地址:http://download.csdn.net/detail/androidxiaogang/9314065

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值