如何在列表视图中按字母顺序显示联系人
你可以在alphabatical为了接触这样的:
Cursor cursor = getContentResolver.query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC");
参考以下链接获取更多cearity:
How to call Android contacts list?
How to get contacts from native phonebook in android
How to obtain all details of a contact in Android
How to get the first name and last name from Android contacts?
How to import contacts from phonebook to our application
How to get all android contacts but without those which are on SIM
对于列表,你可以参考这个教程:
利用这个代码来检索联系人
ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>();
ContentResolver cr = getContentResolver();
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
try{
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
HashMap<String,String> map=new HashMap<String,String>();
map.put("name", name);
map.put("number", phoneNumber);
contactData.add(map);
}
phones.close();
}
}catch(Exception e){}
}
现在的联系人详细信息存储在contactData ArrayList。现在排序此ArrayList像波纹管
Collections.sort(contactData, new Comparator(){
@Override
public int compare(Object o1, Object o2) {
HashMap map1=(HashMap)o1;
HashMap map2=(HashMap)o2;
String s1=(String)map1.get("name");
String s2=(String)map2.get("name");
return s1.compareTo(s2);
}
});
现在联系人详细信息存储在联络资料 ArrayList中的排列顺序。
这工作,但每个联系人重复 – Gibs
我已经加入字母头到联系人列表
new ReadContactTask(context, showProgressDialog,new OnContactReadListener() {
@Override
public void onContactRead(List<ContactItem> dummyList) {
ArrayList<ContactItem> latestPhoneContacts = new ArrayList<>();
if(dummyList!=null && dummyList.size()>0)
{
tvNoResult.setVisibility(View.GONE);
for(ContactItem contactItem : dummyList){
String contactNameInCapital = "";
if(contactItem.getContactName()!=null && contactItem.getContactName().length()>2){
contactNameInCapital = contactItem.getContactName().substring(0,1).toUpperCase();
if(contactNameInCapital.charAt(0) != previousContact.charAt(0))
{
latestPhoneContacts.add(new ContactItem(contactNameInCapital.substring(0,1)));
latestPhoneContacts.add(contactItem);
}
else
{
latestPhoneContacts.add(contactItem);
}
previousContact = contactNameInCapital;
}
}
if(latestPhoneContacts!=null && latestPhoneContacts.size()>0)
contactListAdapter.addItems(latestPhoneContacts);
}
}
@Override
public void onContactEmpty() {
}
}).execute();
其中
private String previousContact ="Zee";
什么是ContactItem – Gibs
你需要这样做:
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
感谢的人!你真棒:D –