此文写给新手的 高手莫看哈!!!
主要更改是ListView的adapter来实现自动过滤。
Demo结构:
java文件:
ContactActivity.java 主屏幕
NewContactAdapter.java 显示“新建联系人”的adapter
PhoneNumberAdapter.java 显示通讯录得adapter
ContactEntity.java 通讯录实体类
Layout文件:
main.xml 一个editText和一个listView
list_item.xml 自定义listview的item布局
list_item_2.xml “新建联系人”的item布局
主要是下面三个文件(demo已上传 有需要的可以下载)
ContactActivity.java
package com.yalitong.activity; import java.util.ArrayList; import java.util.List; import com.yalitong.adapter.NewContactAdapter; import com.yalitong.adapter.PhoneNumberAdapter; import com.yalitong.entity.ContactEntity; import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.view.KeyEvent; import android.view.View; import android.view.View.OnKeyListener; import android.widget.BaseAdapter; import android.widget.EditText; import android.widget.ListView; public class ContactActivity extends Activity { // private String tag = "ContactActivity"; private Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; private String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER }; private Cursor cursor = null; private ListView listView = null; private EditText numberEditText = null; private BaseAdapter baseAdapter = null; private List<ContactEntity> list = new ArrayList<ContactEntity>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView)findViewById(R.id.list); baseAdapter = new PhoneNumberAdapter(this,list); listView.setAdapter(baseAdapter); numberEditText = (EditText)findViewById(R.id.number); numberEditText.setOnKeyListener(new NumberTextView()); } @Override protected void onResume() { super.onResume(); queryContacts(uri, projection, null, null, null); } /** * 监听键盘事件 * @author yangfan * */ private class NumberTextView implements OnKeyListener{ String queryNubmer = null; String selection = null; String[] selectionArgs = null; @Override public boolean onKey(View v, int keyCode, KeyEvent event) { numberEditText = (EditText)v; queryNubmer = numberEditText.getText().toString().trim(); //70-83行可以再优化一下,我这里每次事件都会去查询通讯录 这样肯定不是最好的 大家可以自己优化下 //每次点击键盘的时候先清理list中的数据,如果不清除原先的数据,就会导致ListView数据不停地增加 list.clear(); // selection = ContactsContract.CommonDataKinds.Phone.NUMBER +" like ?"; selectionArgs = new String[]{queryNubmer + "%"}; queryContacts(uri, projection, selection, selectionArgs, null); if(list.size() == 0){ //当没有查到数据的时候 显示“新建联系人”字样 baseAdapter = new NewContactAdapter(ContactActivity.this); }else if(list.size() > 0){ baseAdapter = new PhoneNumberAdapter(ContactActivity.this,list); } listView.setAdapter(baseAdapter); baseAdapter.notifyDataSetChanged(); return false; } } /** * 查询通讯录中的数据 并添加在list中 * @param uri * @param projection * @param selection * @param selectionArgs * @param sortOrder */ private void queryContacts(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder){ cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); ContactEntity contactEntity = null; if(cursor.getCount() > 0){ while(cursor.moveToNext()){ contactEntity = new ContactEntity(); contactEntity.setContactName(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))); contactEntity.setContactNumber(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); list.add(contactEntity); } } } }
PhoneNumberAdapter.java
package com.yalitong.adapter; import java.util.List; import com.yalitong.activity.R; import com.yalitong.entity.ContactEntity; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class PhoneNumberAdapter extends BaseAdapter { // private String tag = "PhoneNumberAdapter"; private Context context = null; private List<ContactEntity> list = null; public PhoneNumberAdapter(Context context , List<ContactEntity> list){ this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null); CacheView cacheView = new CacheView(); cacheView.nameTextView = (TextView)convertView.findViewById(R.id.item_name); cacheView.numberTextView = (TextView)convertView.findViewById(R.id.item_number); convertView.setTag(cacheView); } CacheView cacheView = (CacheView)convertView.getTag(); cacheView.nameTextView.setText(list.get(position).getContactName()); cacheView.numberTextView.setText(list.get(position).getContactNumber()); return convertView; } private class CacheView{ TextView nameTextView = null; TextView numberTextView = null; } }
NewContactAdapter.java
package com.yalitong.adapter; import com.yalitong.activity.R; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class NewContactAdapter extends BaseAdapter { // private String tag = "NewContactAdapter"; private Context context = null; public NewContactAdapter(Context context){ this.context = context; } @Override public int getCount() { // TODO Auto-generated method stub return 1; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //listView中最常见的优化方法 if(convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.list_item_2, null); CacheView cacheView = new CacheView(); cacheView.nameTextView = (TextView)convertView.findViewById(R.id.newContact); convertView.setTag(cacheView); } CacheView cacheView = (CacheView)convertView.getTag(); cacheView.nameTextView.setText(R.string.newContact); return convertView; } private class CacheView{ TextView nameTextView = null; } }
相关推荐
Android 获取系统联系人并发送短信demo
仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片,添加挤压动画.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
仿Android联系人SideBar排序,根据拼音A-Z字母快速导航联系人姓名,以及输入搜索条件过滤,显示姓名的文字图片,添加挤压动画 ,http://blog.csdn.net/u010648159/article/details/50556909这是博客地址
Android ListView上下快速滑动,列表根据右边的滑动区域的英文字母快速准确的筛选出首字母相同的联系人列表,搜索输入框根据输入的文字自动匹配并显示联系人列表。
android 联系人 SIM卡 最近联系人 通讯录 获取源代码
1.Android调用通讯录 2.多选联系人 3.查询联系人时自动提示补全功能 4.发送信息
实现ListView的A-Z字母排序和过滤搜索功能,是一个功能完整的demo
Android 自动批量生成联系人 APK,Android 自动批量生成联系人 APK,正规号码,正规姓名
1.Android调用系统通讯录 2.选择联系人 3.拨打电话 4.添加 查询联系人
联系人管理器:可以新建、编辑、删除联系人,可以添加、删除、重命名分组,可以移动联系人到另一个分组,有生日的联系人还可以在生日当天进行生日提醒。包中含有注解详细的源码及界面截图,设计简陋仅供大家参考!
Android应用自动更新代码实现,完美实现代码的自动更新。
这是博文配套DEMO,博文地址:http://www.cnblogs.com/scetopcsa/p/4724308.html。欢迎指导、交流。
Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能,并挤压效果,项目详情http://blog.csdn.net/huazai963184709/article/details/19119021
此为示例代码,详细讲解请参考 http://blog.csdn.net/sinyu890807/article/details/9050671
Android5.0 Contacts联系人源码
该Demo主要实现了读取手机中的联系人,并且以字母索引表的形式显示,类似于微信中的手机通讯一样的字母索引表。注意:此Demo是用AndroidStudio编写,请用eclipse开发的小伙伴注意了,别下下来用不了还的转,eclipse...
ListView实现A-Z字母排序和过滤搜索功能并且实现汉字转成拼音的功能,获取通讯录联系人和头像
android 指定wifi热点自动连接