У меня есть пользовательский вид списка, и мне нужно отображать контакты в алфавитном порядке. Можно ли предоставить пример кода, как я могу это достичь?
Как отображать Контакты в алфавитном порядке в Listview
Ответ 1
вы можете получить контакты в алфавитном порядке следующим образом:
Cursor cursor = getContentResolver.query(Phone.CONTENT_URI, null, null, null, Phone.DISPLAY_NAME + " ASC");
ссылайтесь на эти ссылки для большей суровости:
Как позвонить в список контактов Android?
Как получить контакты из родной телефонной книги в android
Как получить всю информацию о контакте в Android
Как получить имя и фамилию от контактов Android?
Как импортировать контакты из телефонной книги в наше приложение
Как получить все контакты Android, но без тех, которые находятся на SIM-карте
В списке вы можете обратиться к этому руководству:
Ответ 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){}
}
Теперь контактные данные хранятся в contactDatastrong > 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);
}
});
Теперь контактные данные сохраняются в порядке сортировки в contactDatastrong > 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");