android中联系人搜索框
16lz
2021-01-26
在开发中经常用到获取联系人和搜索框,今天总结一下。
代码很多借鉴于:http://blog.csdn.net/wyzxk888/article/details/8800407
在些基础上做了修改,代码做了适量封装,能够直接适用于项目中。
运行效果图:
代码目录结构:
![这里写图片描述](http://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
更多相关文章
- Android(安卓)Settings中的默认设置
- android app 不会被low memory killer回收
- 在Android(安卓)Studio上测试运行,Unity发布成Android包的环境搭
- android uiautomator写一个崩溃的监听
- android崩溃日志保存sdcard打开并发送到email
- Android的语言设置(二)
- Android(安卓)自定义方形验证码输入框,仿滴滴、小篮单车
- Android(安卓)Studio --> Gradle Build设置自动
- Android修改百度地图的显示范围的大小