How to display Contacts in alphabetic order in Listview [closed]

烈酒焚心 提交于 2019-12-03 12:44:40

问题


I have a custom List view and i need to display the contacts in Alphabetical order can u provide the sample code how can i achieve this?


回答1:


you can get contacts in alphabatical order like this:

Cursor cursor = getContentResolver.query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC");

refer these links for more 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

Android contacts extraction

How to get all android contacts but without those which are on SIM

For list you can refer this tutorial:

http://www.vogella.de/articles/AndroidListView/article.html




回答2:


You need to do this:

Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");



回答3:


use this code to retrieve the contacts

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){}
     }

Now the contact details are stored in the contactData ArrayList. Now sort this arrayList like bellow

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);
                }
            });

Now the contact details are stored in the sorting order in the contactData ArrayList.




回答4:


I have added Alphabetic headers to contact list

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();

where

private String previousContact ="Zee";


来源:https://stackoverflow.com/questions/7316754/how-to-display-contacts-in-alphabetic-order-in-listview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!