Подтвердить что ты не робот

Как отображать Контакты в алфавитном порядке в Listview

У меня есть пользовательский вид списка, и мне нужно отображать контакты в алфавитном порядке. Можно ли предоставить пример кода, как я могу это достичь?

4b9b3361

Ответ 1

вы можете получить контакты в алфавитном порядке следующим образом:

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

ссылайтесь на эти ссылки для большей суровости:

Как позвонить в список контактов Android?

Как получить контакты из родной телефонной книги в android

Как получить всю информацию о контакте в Android

Как получить имя и фамилию от контактов Android?

Как импортировать контакты из телефонной книги в наше приложение

Удаление контактов Android

Как получить все контакты Android, но без тех, которые находятся на SIM-карте

В списке вы можете обратиться к этому руководству:

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

Ответ 2

используйте этот код для извлечения контактов

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​​strong > ArrayList. Теперь отсортируйте этот массивList, как показано ниже.

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

Теперь контактные данные сохраняются в порядке сортировки в contactData​​strong > ArrayList.

Ответ 3

Я добавил алфавитные заголовки в список контактов

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";

Ответ 4

Вам нужно сделать это:

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