java 通讯录姓名分组_根据联系人姓名首字符顺序读取通讯录

1 packagecom.zzw.contacts;2

3 importjava.util.ArrayList;4

5 importandroid.app.ListActivity;6 importandroid.content.ContentResolver;7 importandroid.content.Context;8 importandroid.database.Cursor;9 importandroid.net.Uri;10 importandroid.os.Bundle;11 importandroid.provider.ContactsContract;12 importandroid.view.LayoutInflater;13 importandroid.view.View;14 importandroid.view.ViewGroup;15 importandroid.widget.ArrayAdapter;16 importandroid.widget.ListView;17 importandroid.widget.TextView;18

19 public class MainActivity extendsListActivity {20

21 @Override22 protected voidonCreate(Bundle savedInstanceState) {23 super.onCreate(savedInstanceState);24 //setContentView(R.layout.activity_main);

25

26 ArrayList contacts = new ArrayList();27 readContacts(contacts);28

29 ListView listView = this.getListView();30

31 ArrayAdapter adapter = new MyAdapter(this, android.R.layout.simple_list_item_2, contacts);32 listView.setAdapter(adapter);33 }34

35 private class MyAdapter extends ArrayAdapter{36

37 private intresource;38 privateLayoutInflater inflater;39 private ArrayListcontacts;40

41 public MyAdapter(Context context, int resource, ArrayListcontacts) {42 super(context, resource, contacts);43 this.resource =resource;44 this.contacts =contacts;45 inflater =(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);46 }47

48 @Override49 public intgetCount() {50 returncontacts.size();51 }52

53 @Override54 public Contact getItem(intposition) {55 returncontacts.get(position);56 }57

58 @Override59 public View getView(intposition, View convertView, ViewGroup parent) {60

61 if (convertView == null) {62 convertView = inflater.inflate(resource, null);63 }64

65 Contact contact =getItem(position);66

67 TextView text1 =(TextView) convertView.findViewById(android.R.id.text1);68 TextView text2 =(TextView) convertView.findViewById(android.R.id.text2);69

70 //首字符,分组的依据

71 text1.setText(contact.firstLetterOfName());72

73 //详情

74 text2.setText(contact.name + "" +contact.getPhoneNumbers());75 returnconvertView;76 }77

78 }79

80 //读取设备联系人的一般方法。大致流程就是这样,模板化的操作代码。

81 private void readContacts(ArrayListcontacts) {82 Uri uri = Uri.parse("content://com.android.contacts/contacts");83 ContentResolver resolver = this.getContentResolver();84

85 //在这里我们给query传递进去一个SORT_KEY_PRIMARY86 //告诉ContentResolver获得的结果按照联系人名字的首字母有序排序

87 Cursor cursor = resolver.query(uri, null, null, null,88 android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY);89

90 while(cursor.moveToNext()) {91 //联系人id

92 String id =cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));93 //Sort key,读取的联系人按照姓名从 A->Z 的排序分组

94 String sork_key_primary =cursor95 .getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY));96 //获取联系人姓名

97 String name =cursor98 .getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME));99

100 Contact mContact = newContact();101 mContact.id =id;102 mContact.sort_key_primay =sork_key_primary;103 mContact.name =name;104

105 //获取联系人的手机号码

106 Cursor phone = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,107 ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);108 //取得电话号码(可能存在多个号码)109 //因为在同一个名字下,用户可能存有一个以上号码110 //遍历

111 ArrayList phoneNumbers = new ArrayList();112 while(phone.moveToNext()) {113 int phoneFieldColumnIndex =phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);114 String phoneNumber =phone.getString(phoneFieldColumnIndex);115 phoneNumbers.add(phoneNumber);116 }117

118 mContact.phoneNumbers =phoneNumbers;119 contacts.add(mContact);120 }121 }122

123 //用于装载从联系人数据库中读取到的数据。124 //结构化数据,便于数据操作和访问。

125 private classContact {126 publicString id;127 publicString name;128 publicString sort_key_primay;129 public ArrayListphoneNumbers;130

131 //获得一个联系人名字的首字母。132 //比如一个人的名字叫做“安卓”,那么这个人的首字母是:A

133 publicString firstLetterOfName() {134 String s = sort_key_primay.charAt(0) + "";135

136 returns.toUpperCase();137 }138

139 publicString getPhoneNumbers() {140 String phones = "";141 for (int i = 0; i < phoneNumbers.size(); i++) {142 phones += ": " +phoneNumbers.get(i);143 }144 returnphones;145 }146 }147 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值